|
发表于 2022-8-27 17:29:26
|
显示全部楼层
本帖最后由 jackz007 于 2022-8-27 17:33 编辑
b 是常数指针,& b 就是 b 本身,如果换成真正的指针变量 p 就可以看出区别来了,& p 就不再是 p 了,试试下面的代码
- #include <stdio.h>
- int main(void)
- {
- int b[5] = {1,2,3,4,5} , * p = b ;
- printf("b = %p\n" , b) ; // 打印常数指针 b 的数值
- printf("& b = %p\n" , & b) ; // b 是常数指针,其地址就是指针本身
- printf("*& b = %p\n" , * & b) ; // 打印常数指针 b 的数值
- printf("p = %p\n" , p) ; // 打印指针变量 p 的数值
- printf("& p = %p\n" , & p) ; // 打印指针变量 p 的储存地址
- printf("*& p = %p\n" , * & p) ; // 打印指针变量 p 的数值
- printf("b[0] = %d\n" , * p) ; // 打印 b[0] 的数值
- printf("b[0] = %d\n" , p[0]) ; // 打印 b[0] 的数值
- printf("b[4] = %d\n" , * (p + 4)) ; // 打印 b[4] 的数值
- printf("b[4] = %d\n" , p[4]) ; // 打印 b[4] 的数值
- }
复制代码
编译、运行实况:
- D:\[00.Exerciese.2022]\C>g++ -o x x.c
- D:\[00.Exerciese.2022]\C>x
- b = 0022FF3C
- & b = 0022FF3C
- *& b = 0022FF3C
- p = 0022FF3C
- & p = 0022FF38
- *& p = 0022FF3C
- b[0] = 1
- b[0] = 1
- b[4] = 5
- b[4] = 5
- D:\[00.Exerciese.2022]\C>
复制代码
从上面的输出结果可以看出,b 的 3 个输出是一样的,而 p 是有区别的。这就是常数指针和指针变量的区别。 |
|