admin 管理员组文章数量: 887042
C语言中p, *p, p, *p, **p的理解
*(星号):间接寻址运算符,通过一个内存地址访问一个值(一种操作)。
&(数学逻辑符号:与/和):取地址运算符,获取一个值的内存地址(一种操作)。
直接寻址:直接通过变量名来获取变量的值,或直接用变量的地址来存储值,例如:
scanf("%d", &a); // 把值通过a的地址直接存储到变量a里。
printf("%d", a); // 直接通过变量名a获取a中的值。
间接寻址:变量a的内存地址存放在指针变量p中。先通过指针变量名p获取p中的地址数据,再通过这个地址数据访问a的值。
int a = 99;
int *p = &a;
所以:
指针变量名:
p:存放a的内存地址数据(16进制)。// 输出类型为%p,数字99在内存中存放位置的地址数据。
操作:
*p:获取指针变量p中存放的地址数据对应的存放位置(即a)的值。// 输出类型为%d,结果为99。
&p:获取指针变量p的内存地址数据。// 输出类型为%p,结果为16进制的8位地址。
&*p:首先通过p获取a的值,然后获取a的内存地址数据。// 输出类型为%p,与p的值相同。
**p:存放指针变量p的地址空间的地址。?
使用指针时的3条准则:
1、要清楚每个指针指向的位置,且必须指向一个有意义的位置。
2、要清楚每个指针指向的位置里的内容。
3、不要使用未初始化的指针变量。
版权声明:本文标题:C语言中p, *p, p, *p, **p的理解 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1688142231h184315.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论