1.什么是指针
定义一个变量,系统就为该变量分配一个内存,可以用来存放数字、字符等等,如果用来存放地址,那么这个变量就是指针
2.指针运算
(*p)++和*p++的区别
C编译器认为*和++是同优先级操作符,且都是从右至左结合的,所以*p++中的++只作用在p上,和*(p++)意思一样。
(*p)++是所指向的值加1;*p++则是一个地址,先求*p的值,然后p++,指向下一个元素。
3.指针和数组
1)数组的指针是数组的起始地址;数组元素的指针是数组元素的地址。
2)用指针引用数组元素
如果指针变量P已指向数组中的一个元素,则P+1指向下一个元素。
例如,P的初值是&a[0] 则p+i和a+i都是a[i]的地址;*(p+i)和*(a+i)即为a[i].
4.指针与字符串
在C中有两种方法访问一个字符串
1)用字符数组存放一个字符串 char string[] = "I love China!"
2)用字符串指针指向一个字符串 char *string[] = {"I love China!"};printf("%s\n",*string);
注意:*string的值还是指针,*string[i]才是值。
5.指针和函数
1)函数指针:指向这个函数的指针 数据类型(*fun)(参数列表)
2)指针函数:返回值是指针的函数 数据类型 *fun(参数列表)
在C语言中,变量有它的地址,同理函数也有地址,那么把函数的地址赋给函数指针,再通过函数指针调用这个函数就可以了。
分析 int*(*(*fp)(int))[10]
右左法则:首先从变量名fp开始往右看,遇到反括弧,往左,遇到* ,说明fp是一个指针,再往右看,遇到(int) ,说明fp这个指针指向的是一个函数,而且函数的形参是一个int型,继续往右遇到反括弧,往左,遇到* ,说明这个函数的返回值是一个指针,往右看,遇到[10],说明返回的这个指针指向的是一个数组,而且这个数组有10个元素,最后往左看,是int * ,说明这个数组是返回值是int *型。