一、指针的基本概念
指针是一个变量,它存储的是另一个变量的内存地址。通过指针,我们可以间接访问和修改另一个变量的值。指针的定义形式为:类型名 *指针变量名;
。例如:int *p;
定义了一个指向整数类型的指针变量p
。
指针变量的值可以通过取地址运算符&
来获取另一个变量的地址,例如:p = &a;
将变量a
的地址赋给指针变量p
。同时,我们也可以通过指针变量来访问和修改其所指向变量的值,例如:*p = 10;
将指针变量p
所指向的变量的值修改为10。
需要注意的是,指针变量本身也有自己的地址,我们可以通过&p
来获取指针变量p
的地址。
*p在底层做的事
1、通过指针变量中的值到内存空间中定位。
2、从定位处开始向后偏移sizeof(基类型)。
3、将偏移好的那部分内容空间当作是一个基类型变量来看。
二、指针与数组的关系
在C语言中,数组名实际上是一个指针,它指向数组的首元素的地址。例如,对于数组int a[10];
,我们可以通过a
来访问数组的首元素,也可以通过a + i
来访问数组的第i
个元素。
同时,我们也可以定义一个指针变量来指向数组,例如:int *p = a;
。这样,我们就可以通过指针变量p
来访问数组的元素 a[i]等价于 *(a+i)
当*和&运算符在一块时, 可以抵消。
需要注意的是,当指针变量指向数组时,我们可以通过指针变量来修改数组元素的值,但不能修改指针变量所指向的数组的地址。