指针
概念
- 指针:地址。
- 指针变量:存放指针的变量。
int * p
*int *
可看作类型,p为变量名称。
* 定义一个指针变量p,p存放的是地址,可指向存放int类型的变量。 - 取地址符
&
:int i = 10; int * p = &i;
- 普通变量
i
存放了int
类型的数据,利用取地址符&
可将i
的地址赋值给指针变量p
,这时候可以说p
指向i
。
- 普通变量
- 取消引用运算符
*
(引自《C语言入门经典(第四版》):int i = 100; int * p = &i; int j = *p;
p
指向i
,利用*p
可以获得p
指向的变量i
的值,即*p == 100
,因此最终j == 100
。*
用法总结- 乘法
- 定义指针变量
- 获取指针变量指向的数据
指针与数组
待更新
指针变量的运算
- 指针变量存放的地址本质上还是整数,理论上可以整数的运算都是用,但对指针变量进行乘除操作是没有意义的。当指针指向的数据在内存中是连续的时候(如数组),地址是连续的指针,可进行加减运算。
int a[10]; int * p1 = &a[3]; int * p2 = p1 + 1; int * p3 = p1 - 1;
- 数组
a
可存放10个int
类型的数据,假设int
类型为4个字节,那么a
在内存中占4*10
个字节。 - 因此,
p1
指向第4个元素,p1
中存放的是第17个字节的地址。 p2 = p1 + 1
p2
中存放的并不是第18个字节的地址,而是下一个元素,即第5个元素的首地址,亦即第21个字节的地址。- 同理可推算出
p3
。
- 数组
指针与字符串
待更新