定义指针的一般形式
类似定义变量的形式,数据类型包含 int、char、float等:
类型名 *指针变量名;
指针有什么用?
定义一个变量value:
int value = 150;
定义一个指针pv:
int *pv = &value;
*注:定义指针时应对指针进行初始化,原则上不允许int *pv;
这样的指针出现。如果没有想好,可以将指针定义为空指针char *p = NULL;
于是我们就定义了一个指向value的指针pv
int value
是定义了一个名为value
的整型变量,它的值为150,存储这个数据的内存为0001H,为了访问这块内存空间,我们定义了一个指针pv
,其中存储的信息为访问value
中数据的内存序列。
作用分析
那么运行结果:
pv = 0x6dfd74
&value = 0x6dfd74
value = 150
*pv = 150
从以上代码可以看出,pv与&value的作用相同,都是取地址;*pv与value的作用相同,都是取变量的值。因此可得如下关系表:
代码 | 作用 |
---|---|
pv/&value | 取变量地址 |
*pv/value | 取变量的值 |
如果输入*pv = 300;
那么将会把value的值置为300。
指针与数组
指针与数组可以进行联用,如已知一个数组a[i]
:
在初始定义指针时,int *pa = &a[0];
与int *pa = a;
等价;在后续调用时,pa = &a[0];
与pa = a;
等价。
指针取数组第一个元素的首地址。
通过指针引用数组
取数组中元素的值有如下几种等价表示方法:a[i]
、pa[i]
、*(a+i)
、*(pa+i)
。
取数组中地址有如下几种等价表示方法:&a[i]
、&pa[i]
、(a+i)
、(pa+i)
。
pa对准了数组的地址。但pa++
;并不是指针变量pa的值简单加1,而是加上了一个基类型的字节数,如定义的是int型,则是移动了sizeof(int)
= 4个字节数,不同数据类型所占字节的大小不同,依据编译器的位数而定,可参见https://blog.csdn.net/iXiaochu/article/details/100535333。