1.对代码:
1.int a=10;
2.int * p =&a;
3.int **pp=&p;
上述的2中的*告诉了我p是个指针,前边的int告诉我p指向的数据类型是int类型
类似可得3中的第二个*告诉了我pp是个指针,前边的int*告诉我pp指向的数据类型是int*类型
4.编译器在处理arr[i]的时候,是先将其转化为*(arr+i)再进行下一步操作的
而对arr[i][j],先将其转化为*(*(arr+i))再进行下一步操作
5.开始深入了解指针了要
6.char a = 'w';
char *p = &a;
则p是一个字符指针
7.对char* p = "asdfgh";
这是将 "asdfgh"的首字符的地址存入了p中
可以将"asdfgh"想象成一个字符数组,但是这个数组是不能被修改的(用好const)
下列代码
printf("%c\n","asdfgh"[3]);
和printf("%c\n",p[3]);
打印出来的都是f
当常量字符串出现在表达式中的时候,它的值是第一个字符的地址
8.C语言会将常量字符串存储到单独的一个内存区域
9.数组指针是指向数组的指针
就如同整形指针是指向整形的指针一般
而上述中的数组指针里边存放的是数组的地址
即int arr[10];里的&arr
10.int* p1[10]
是指针数组
int (*p2)[10]
是数组指针,指向的数组有10个元素,且元素类型是int
11.对类似于这样的等式:
int (*p)[10]=&arr;
因为左边的变量类型是int (*)[10],所以右边的数据类型也是int (*)[10]
12.数组指针就是一个指向数组的指针而已
13.对代码
int *p = &arr;
其中的*p==*&arr==arr
所以arr[i]==(*p)[i]
14.对二维数组:首元素的地址其实就是第一行元素的地址
其实二维数组就是一维数组的数组,所以形参中如果要用指针接收二维数组的话,那么就要用到数组指针,例如:int (*arr)[5](后边那个5指的是二维数组的列)
15.*&arr[ ]即arr数组首元素的地址
16.用数组指针接收二维数组的个例
搜用数组指针接收二维数组的个例
17.不能学得太细
18.函数指针变量是用来存放函数的地址的
19.在代码
中
函数名和&函数名得到的都是函数的地址
可以用
int (*pf)(int ,int )=&Add;
来存放函数的地址
然后 我们可以用
(+11).int r = (*pf)(1,5);
来调用这个函数
上边的那个定义函数指针变量中,&Add改为Add也可以
上边的(+11),那个(*pf)换为pf也行
20.int()3.14是强制类型转换
21.函数调用不能传类型
22.关于函数指针的特别声明搜函数指针的特别声明
23.关于函数的重命名搜关于函数的重命名