指针是C语言中很重要的一部分,那么指针到底是什么,在这里,小编将自己对于指针的理解用通俗易懂的语言总结如下。
一.指针是什么?
指针同int、char等一样,也是数据的类型。
指针类型的变量有很多种:如int*、char*等,虽然都是指针类型,但是这些都是截然不同的指针类型。
明白了指针是一种数据的类型之后,就来看看指针变量是干什么的。
int a=10;
int* p=&a;
printf("%d\n",a);
printf("%d\n",*p);
printf("%p\n",&a);
printf("%p\n",p);
结果如下图所示:
我们可以很清楚地看到指针变量存放地是变量在内存中的地址。
那么我们就可以把指针变量理解成一个房间号。
而解引用符号 ‘ * ’,在之前地文章中也说过就相当于是拿着房间号,打开房间,去访问房间内的信息。
用下图来表示:
了解了指针是什么以后。再来了解指针的简单操作。
二.各种指针的含义:
1.一级指针:简单的理解就是只有一个“*”,存放某变量的地址。
2.二级指针:形式就是“**”,存放指针变量的地址。
3.指针和数组:指针是存放变量地址的变量,数组是一段连续的内存空间,当数组名作为函数的参数时,则传进去的是指向数组首元素的地址,相当于指针。
4.指针数组:数组元素均是指针类型的变量。
三.指针的简单操作
之前也讲到过,指针类型的大小与其类型无关,而与操作系统的位数有关。
简单来说就是:无论是int*、还是char*等。
32位系统下:4个字节
64位系统下:8个字节
那么,我们之前将数组的时候说过,当数组是函数参数的时候会被隐式转换成指向数组首元素地址的指针。
其实,在这里,需要注意的是数组和指针之间的转换关系:
a[i]<=>*(a+i);
这样我们就有了以下操作:
指针与数组间的转换:
在这里需要注意的是数组指针的概念:
注意:
1.数组指针:本质上还是指针,形式为&+数组名。
2.指针+1,这种运算表示下一个空间,具体要看指针变量的类型。如:int* 跳过四个字节,char*就跳过一个字节。
3.但是,数组指针+1,跳过的是整个数组。