免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: DNFCF
打印 上一主题 下一主题

[C] 对指针的一个疑问? [复制链接]

论坛徽章:
0
31 [报告]
发表于 2011-01-05 10:58 |只看该作者
再补充一下,char *p="XXXXXXXXX"都可以,为何int *p=5;却不行。为什么?

论坛徽章:
0
32 [报告]
发表于 2011-01-05 11:54 |只看该作者
本帖最后由 KBTiller 于 2011-01-05 13:40 编辑
再补充一下,char *p="XXXXXXXXX"都可以,为何int *p=5;却不行。为什么?
DNFCF 发表于 2011-01-05 10:58


因为 "XXXXXXXXX" 的类型是 char *(更严格的说法应该是某种字符数组)
而 5 的类型是 int 不是 int *

char *p="XXXXXXXXX" ;
等价于
char *p ;
p="XXXXXXXXX" ;


int *p=5;
等价于
int *p;
p = 5 ;

论坛徽章:
0
33 [报告]
发表于 2011-01-05 12:54 |只看该作者
再补充一下,char *p="XXXXXXXXX"都可以,为何int *p=5;却不行。为什么?
DNFCF 发表于 2011-01-05 10:58



    XXXXXX..  是一个常量 P指向他的地址  而 后者 P=5 因为5程序本身是不会去保存这个常量的 所有没有地址 所有P指向他就错了

论坛徽章:
0
34 [报告]
发表于 2011-01-05 14:01 |只看该作者
回复 29# DNFCF


    char *p="this is example!\n";
这句话会在编译成汇编会是这样的将"this is example!\n"存放在.rodata段,然后将这段地址给p。
不是malloc出来的,malloc出来的都是在堆里,malloc出来的空间当然要用free释放掉啊,不过释放时要注意先后顺序啊。
不会覆盖原先的内容因为字符串常量都在编译时放到了.rodata段中
所有的字符串都至返回首地址,而不是返回的值

论坛徽章:
0
35 [报告]
发表于 2011-01-05 14:55 |只看该作者
多谢大侠们不吝赐教,受教了。

论坛徽章:
0
36 [报告]
发表于 2011-01-06 22:42 |只看该作者
如果指针没有加减运算或许可以不要类型

论坛徽章:
0
37 [报告]
发表于 2011-01-07 06:56 |只看该作者
如果指针没有加减运算或许可以不要类型
sparkzh 发表于 2011-01-06 22:42



    还是不行
    一元 * 运算没有类型也是无法想象的

论坛徽章:
0
38 [报告]
发表于 2011-01-10 10:39 |只看该作者
比如说吧:
(void *)0;
(int *)0;
(char *)0;
(double *)0;
.........
可以这样写吧,他们有区别吗?
DNFCF 发表于 2011-01-04 09:46



    lz,你这个问题本不该在论坛上问的。

另外,(xxx *)0,这个东西,在很多OS下会现Segmentation 错误的.

论坛徽章:
0
39 [报告]
发表于 2011-01-10 15:27 |只看该作者
你可以这样去理解,char*不是指针的类型而是指针向内容的类型。

论坛徽章:
0
40 [报告]
发表于 2011-01-11 13:00 |只看该作者
本帖最后由 liu2g 于 2011-01-11 13:13 编辑

回复 3# DNFCF

给指针赋予不同类型时,指针所代表的地址长度都不同。比如字符指针所指向的地址长度是1字节,而整型指针为4字节。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP