kewenliang
C/C++基础知识解惑
char *p="abcd";
char b[]="abcd";
请问p==b吗?为什么?
scutan
printf("%x, %x/n", p, b); 就可以看到结果了。
实际上,p是一个指针,它指向一个"abcd"的字符串
而b是一个数组,它是在栈上开辟的一个空间,这个空间由"abcd"这个字符串来填充。
kewenliang
[quote]原帖由 [i]scutan[/i] 于 2008-6-19 15:29 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8620917&ptid=1164718][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
printf("%x, %x/n", p, b); 就可以看到结果了。
实际上,p是一个指针,它指向一个"abcd"的字符串
而b是一个数组,它是在栈上开辟的一个空间,这个空间由"abcd"这个字符串来填充。 [/quote]
恩
是不是么回事:char *p="abcd",此处的abcd是在堆内存中的,而char b[]="abcd"是填充在栈空间的,
所以两者的内存地址不相等。
可以这样理解吗?
Cyberman.Wu
[quote]原帖由 [i]kewenliang[/i] 于 2008-6-19 15:35 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8620975&ptid=1164718][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
恩
是不是么回事:char *p="abcd",此处的abcd是在堆内存中的,而char b[]="abcd"是填充在栈空间的,
所以两者的内存地址不相等。
可以这样理解吗? [/quote]
b是在栈里面的,而p指向的字符串实际上一般在数据段或只读的数据段,不会在栈空间。这两者的区别主要是注册一些字符串,如PCI驱动的名称,如果指向一个临时数组到访问时数据已经不存在了。
kewenliang
[quote]原帖由 [i]Cyberman.Wu[/i] 于 2008-6-20 06:11 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8623933&ptid=1164718][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
b是在栈里面的,而p指向的字符串实际上一般在数据段或只读的数据段,不会在栈空间。这两者的区别主要是注册一些字符串,如PCI驱动的名称,如果指向一个临时数组到访问时数据已经不存在了。 [/quote]
恩 对
道理是这样的
平常读程序或者写程序的时候一般不考虑这些,只管程序字面含义,程序在计算机内部的存储结构等模模糊糊的
什么时候才能达到 当看见一段代码时 它的内部细节,存储结构等等 都了然于胸呢?
ruoyisiyu
[quote]原帖由 [i]kewenliang[/i] 于 2008-6-20 09:22 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8624440&ptid=1164718][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
恩 对
道理是这样的
平常读程序或者写程序的时候一般不考虑这些,只管程序字面含义,程序在计算机内部的存储结构等模模糊糊的
什么时候才能达到 当看见一段代码时 它的内部细节,存储结构等等 都 ... [/quote]
多写代码(不是滥写)+操作系统+编译原理+汇编+领悟