C语言回顾-指针

1.指针:地址

指针变量:存放指针的变量

指针变量的定义:数据类型 *指针变量名 或者 数据类型* 指针变量名

指针变量的初始化:int *p=&a;int *p=NULL;(不能先定义后初始化)

用*p获取指针变量指向的内存空间

如果指针变量定义以后不进行初始化,这个指针变量存放的是一个垃圾数,这个指针变量,称为野指针

用函数实现变量值的交换,传递指针

//
//  main.c
//  变量值交换
//
//  Created by fanyafang on 15/11/4.
//  Copyright  2015年 itcast. All rights reserved.
//

#include <stdio.h>
void change(int *a,int *b){
    //用两个指针变量接收地址
    //交换地址中所存的内容
    //这样函数执行完以后,指针所指向的内容已经发生了改变
    int temp=0;
    temp=*b;
    *b=*a;
    *a=temp;
}

int main(int argc, const char * argv[]) {
    int a=3,b=4;
    
    change(&a,&b);
    
    printf("a=%d,b=&b",a,b);
    
    return 0;
}

2.指针的应用场景

1)在被调函数中可以修改主调函数的值

2)让函数可以有多个返回值(把地址传过去,可以修改地址指向的值)

3.二级指针

int **p1=&p;//p是一个一级指针

4.数组指针

指向数组的首地址

int a[4]={1,2,3,4};

int *p=a;

p+1指向数组的下一个元素

p-1指向数组的上一个元素

*(p+1)取得p+1对应的存储单元的内容

*(a+1)同上

*p++相当于*(p++)

*a++这样写是错误的,因为a是一个常量

5.一维指针数组

int a=0,b=0,c=0;

int *pa[3]={&a,&b,&c};//数组的值是地址

6.指针变量之间的运算-相减 判断两个指针变量之间相隔几个元素

7.用数组名访问二维数组

二维数组可以看做是特殊的一维数组

a;a+1;a+2是行指针

a[i]+j是列指针

第一行的首地址a[1]或a+1;

第二行第一个元素的地址:*(a+1)或者&a[1][0]

a=&a[0]=&a[0][0]=a[0]

8.二维数组指针-指向二维数组的指针

int a[2][3];

int (*p)[3]=a;//定义行数组指针

p=a;

p+1指向第一行

二维数组指针可以替代数组名使用

9.指针数组和二维数组指针的区别

指针数组int *p[3];//数组里放的是地址,是多个指针

二维数组指针 int (*p)[3];//指向二维数组的指针,是一个指针

 

原文地址:https://www.cnblogs.com/fanglove/p/4936236.html