指针,其实也是一种数据类型,占有四个字节,不过其中放置的是某个地址(也就可以理解成它指向了某一块内存空间)。
C语言中经常操作地址,所以指针的引入使我们更加便利的执行某些地址的操作。
1、某些容易混淆的指针定义。
int *p;int类型的指针,它所指向的是一个int类型的变量所在的内存区域。
int *p[n];int类型的指针数组。这是一个数组,里面存放了n个int *类型的变量。
int (*p)[n];int类型的数组指针。这是一个指针,可以看作是int(*)[n],它指向了一个数组的首地址,这个数组里面含有n个int类型的变量。
int *fun(int a);带有一个int类型参数,返回值是一个int类型指针的函数。
int (*fun)(int a);这是一个函数指针,这个指针指向了一个函数的首地址,这个函数有个int类型的参数和int类型的返回值。
2、const修饰的指针
const int *p;const修饰的是int *,也就说p指向的地址类型 int,而且是不可变的。p的指向可变,但是所指向的地址中的内容不能改变
int * const p;const修饰的是p,当const修饰p的时候,表示这个指针的内容不能改变,也就是它的指向不能改变,但是它所指向的内存空间并没有被const修饰是可以改变的。
3、指针移动操作。
int a[10] = {1,2,3,4,5,6,7,8,9,0};
int *p = a;
当前p指向的是a的首地址,*p(也就是指向的内存空间的内容)也等于a[0];
当p进行++操作之后,因为它是int类型的指针,它每次++就会指向下一个int类型,也就会移动到a[1]的位置,当前*p 就会等于a[1];
另外一种就是(&a)+1,其中&a可以理解为将数组看成一个整体,取其地址,在这个基础上加一,其实移动了10个int的大小。 |
|