请教sizeof(str)与sizeof(*str)的区别是

请问sizeof(str)与sizeof(*str)的区别是?
刚接触C开发,虽然以前觉的自己的C语言基础还行,但真正编写起代码来还是会碰到很多问题。

比如有个简单的结构体
C/C++ code

struct test {
     int id ;
     char *name ;
     struct test *next ;
}test_;
char *str = "hello,the world";
test_->name = *str;  /*错误1: 不说了,哎。。*/


练习下链表的起因,在赋值test->name的时候需要开辟空间,所以用到标题上的sizeof().打算把 *str赋过去,
发现sizeof(str)与sizeof(*str)都可以,一时找不到资料,还请了解到 大虾 免费说说,谢谢verymuch. 新人,分少哇。。


------解决方案--------------------
CSDN的服务器又抽风了
至于sizeof(str)是获取指针长度,在32位系统下为4个字节
sizeof(*str)获取一个字符的大小,1个字节
------解决方案--------------------
sizeof(str)是求指针(str)的字节数,在32位的机器上,指针所占的字节数为4个字节,输出为4,str指向字符串"hello,the world"的首地址,也就是'h'的地址,因此,解引用的结果*str = 'h',sizeof(*str)结果就是1了,'h'只占一个字节
------解决方案--------------------
char*类型的字符串是存储在全局区的,不允许改变。你给name赋值就错了。改成char name[] = {0}试试。而且你的str只是只想字符串的首地址,你这用赋值是不能把整个字符串付给name的。
------解决方案--------------------
发不出,再发一次

char *str = "hello,the world";
(1)sizeof(str)意思是sizeof(char *),表示获得char *的长度,即指向char的指针的长度,用32位寻址方式,就是32位地址,一个字节对应8位,就是4个字节了,所以结果是4。
(2)sizeof(*str)意思是sizeof(char),表示获得char的长度,一个char就是1个字节了,所以结果是1。

char str[] = "hello,the world";
(1)sizeof(str)意思是sizeof(char [16]),表示获得(sizeof(char) * 16),的长度,因为hello,the world由15个字节构成,加上字符串结束符0,刚好就是16个,所以用[]建立数组就是系统划得16个字节的空间,结果是16。
(2)sizeof(*str)意思是sizeof(char),跟上一种情况一样,结果是1。

综上,sizeof所返回的是类型对应的长度,你要先搞清楚你传进去的入参是什么类型的,就能判断它返回的是什么了,如果不了解可以自己测试一下。
------解决方案--------------------
探讨
CSDN的服务器又抽风了
至于sizeof(str)是获取指针长度,在32位系统下为4个字节
sizeof(*str)获取一个字符的大小,1个字节

------解决方案--------------------
sizeof只关心目标的类型,不关心目标的值。
所以:sizeof(str) 等价于 sizeof(char *) 又等价于 sizeof(int)
sizeof(*str) 等价于 sizeof(char)
------解决方案--------------------
试试先
多谢赵老师!!
haha~
探讨
引用:
CSDN的服务器又抽风了
至于sizeof(str)是获取指针长度,在32位系统下为4个字节
sizeof(*str)获取一个字符的大小,1个字节

让IE6访问CSDN论坛不假死的绝招!
http://topic.csdn.net/u/20120216/12/30e4bd88-43ae-4ba4-a044-b8519d9906f2.html……