鱼C论坛

 找回密码
 立即注册
查看: 2616|回复: 5

关于指针的小问题

[复制链接]
发表于 2020-1-16 23:05:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
int main(void)
{
        char *a="ikjk";
        printf("%s %d %d\n",a,a,&a);
}


此时输出为
ikjk 4333608 1638212
此时指针a的地址 a  为什么跟&a不同呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-16 23:10:43 | 显示全部楼层
本帖最后由 jackz007 于 2020-1-16 23:16 编辑

        a  作为一个指针,在 main() 中也是一个局部变量,也会在堆栈中分配到存储空间。如果程序是 32 位的,a 会占用 4 个字节(32位指针),如果是 64 位的,则会占用 8 个字节(64 位指针),a 的值是保存有字符串 "ikjk" 的内存地址,也就是被保存在这 4 或 8 个字节内存空间的内容,但是,作为一个变量,a 自己也是有内存地址的,那么,& a 就是它自己的内存地址,这不是很正常吗?
        在 printf() 中,应该使用专用的格式描述符 "%p",而不是 "%d" 来显示一个指针(内存地址)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 3 反对 0

使用道具 举报

发表于 2020-1-19 22:20:04 | 显示全部楼层
如果int b=1,&b是不是值1的地址,&b对应的内容可能是1吗?不可能
如果你这么看 char* a,那a不就是一个char*类型的变量,那么请问&a是什么?不就是这个a所对应值的地址,同理,a能等于&a吗?答案是一样的
你理解上还有点偏差,其实&a是a这个指针所在地址而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-20 10:56:37 From FishC Mobile | 显示全部楼层
一个是指针本身的地址一个是指针指向的地址,一个位于南京指向武汉的路标,你要查看路标指向的位置就是武汉,路标本身的位置就是南京
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-21 15:23:48 | 显示全部楼层
4333608应该是字符串“ikjk"的首地址,而1638212是指针a的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-21 17:09:48 | 显示全部楼层
指针 是一种数据类型 指针占内存空间  指针指向的变量也占内存空间  要分清指针的指向 和 指针的本身
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 08:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表