【嵌入式学习历程6】 指针(1)

来源:互联网 发布:海贼王 居鲁士 知乎 编辑:程序博客网 时间:2024/05/22 15:48

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 *型。