1.取地址运算符&
写在一个数据对象的左边,可以获取一个数据对象的
首地址
和所需
存
储空间大小。
int
n;
类型 pn
= &
n;
//
获取数据对象
n
的首地址和所需空间大小
2.指针的声明
![](https://i-blog.csdnimg.cn/blog_migrate/ebf9a3ffd6a256baaabcbf4aba2dbbfa.png)
int
n;
int*
pn
= &
n;
int* pn
声明了一个保存了
int 类型
的首地址和大小的变量。
变量
pn
存储了变量
n
的首地址与大小(即取地址运算符&吧n 的首地址和大小赋给了变量pn),我们通过pn就可以在内存中找到变量 n。
对于上面的代码:
pn
被称作
n
的指针,或者说
pn
指向
n
。
2.指针类型
指针类型怎样保存下面两种信息。
1.
数据对象的首地址。
2.
数据对象占用存储空间大小。
(1)指针类型的值就是目标数据对象的首地址
。
int n1;
int n2;
int *pn1 = &n1;
int *pn2 = &n2;
printf("pn1 = %u\n", pn1);
printf("pn2 = %u\n", pn2);
用 %u 尝试打印指针变量 pn1 到 pn2 ,看出它们确实为一些数值。 并且,数值之间均相差4。因此可以看出,n1到n它们相邻排布,而这些数值就是n1到n2的首地址。
(2)C
语言中通过不同的指针类型来标记目标数据对象的空间大小
。
3.如何使用指针
我们先再认识一个符号---取值运算符*
取值运算符是一个一元运算符,写在一个指针的左边,可以
根据指针中存储的首地址和空间大小找到目
标数据对象
。
int n = 123;
int* pn = &n;
printf("%u\n", pn); // 打印n的首地址
printf("%d\n", *pn); // 根据`pn`中的首地址与大小,找到的数据对象的值
pn 变量内存储的值,即 n 的首地址。
*pn
表达式结果为,根据
pn
中的首地址与大小,找到的数据对象的值。即
n
的值。
所以通过指针,根据 pn 中的首地址与大小,可以找到的数据对象的值。
int n = 0;
int* pn = &n;
char c = 0;
char* pc = &c;
// 使用指针修改所指向数据对象
*pn = 123;
*pc = 'A';
printf("n = %d\n", n);
printf("c = %c\n", c);
// 使用指针访问所指向数据对象
printf("n = %d\n", *pn);
printf("c = %c\n", *pc);
![](https://i-blog.csdnimg.cn/blog_migrate/2c8029b902e395d55e06e3e1295314a2.png)
除了通过指针访问所指向的数据对象,也可以通过指针修改所指向的数据对象。