01指针变量
地址变量=指针变量(存放地址值)
内容值只能放在内容变量里
指针在内存中分配的字节数相同 (2字节)
指针变量要定义并初始化
1 | int *temp ; |
02指向数组元素的指针变量
*p++ = *(p++) (单目同级别由右向左运算)
03指向多维数组的指针变量
列指针变量
1 | int a[2][3]={1,2,3,4,5,6} |
行指针变量
1 | int a[5][7] |
int w[3][4]
w
:
- 元素首地址
- 地址常量,不能修改
- 行指针,w+1向下移一行
04指向字符串的指针变量
按首地址处理符串常量 “abc”=首个字符地址常量
1 | char str[]="abc"; |
05指向函数的指针变量
函数名与数组名一样,是起始地址,是地址常量
类型名 (*指针变量名)()
1 | int fun() |
06返回指针的函数(返回地址)
1 | int *fun (int *x,int *y) |
07常量指针(可以换值,不能换地址)
1 | int x =100; |
08指针常量(可以换地址,不能改值)
1 | int x = 100; |
09数组作为函数参数
call by value 传值调用
call by reference 传引用 (&a,节省内存)(*p 解引用)
当编译器看到数组作为参数的时候,不会拷贝整个数组,而是创建一个指向数组首元素的指针,所以数组作为参数总是传引用不会传值
int A[] = int *A ([]表示这是一个数组)还需要传入数组长度,如图2,但是字符数组不用,字符数组到‘\0’结束