为什么char型指针可以直接赋值而其他类型的不行呢?个人见解

本文探讨了C/C++中指针赋值的问题,通过对比char指针与int指针的不同赋值方式,揭示了指针赋值的本质。并通过具体实例说明了指针变量存储的是地址而非值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://blog.youkuaiyun.com/zyw_anquan/article/details/7790708

问题陈述:

通常大家会遇到这样的问题:

char * p = "abc";可以顺利执行,而int *a = 1;确运行不了(这里指运行环境是VC,GCC竟然可以成功执行,这里我也比较迷惑)。

问题探讨:

这里都是我的个人看法:

int *a = 1;

这句话的代码从人类语言的理解上,就是给一个指针赋值并指向一个值为1的地址。但是编译器它不是人,它只知道char型的指针可以直接“赋值”,而int型的指针如果“赋值”怎么做呢?通常有两种做法:

方法一:

int j = 1;

int &r = j;

那么r中的值就为1,但是这里的r却不是我们想要的指针变量。

如果说一定要给int型指针变量赋值,我们采用:

方法二:

int i = 1;

int * a = &i;

的话,结果却是i的内存地址。怎么回事呢?在解决问题之前,我先举个例子:

我们定义为:
char *aa="abc";
char *bb="abc";
aa与bb相等吗?
和char aaa[]="abc";
char bbb[]="abc";
aaa与bbb相等吗?
这个问题的思考就能很好地理解这里的指针“赋值”问题了。
上述例子的结果是:aa == bb   true ;   aaa==bbb   false
这个结果从两个角度解释,
角度一( 
 静态存储区和栈):
char *aa="abc";
char *bb="abc";
系统把  "123"  放在了静态存储区里,栈里放了  aa  这个指针变量,指向了  "123"这个地址。
char aaa[] = "123";
char bbb[] = "123";
是系统在栈里面放了两个字符数组变量,互相无任何关联,因此它的aaa与bbb不会相等。
角度二(指针内容和地址):
aa和bb存的都是相同的指针地址。
aaa和bbb虽然都是 "abc",但地址不一样。
问题总结:
既然这个问题能够理解清楚,那么从这两个角度来说,给指针一个内容那么就不能跟我们传统意义上的“赋值”相提并论。因为对于问题中int *a = 1;来说这个1 是整型数据不能放入静态存储区。而从内容和地址来说,如果像上述两种赋值方式得到的只能是内存的地址,而不是内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值