69,368
社区成员
发帖
与我相关
我的任务
分享
char *names[]={"zhangsan","lisi","wangwu"};
这样,每个指针指向对应的字符串
int *nums[]={1,2,3,4,5};
int *names[] = {"abxd", "sefh"};
3、整形字面值常量可以为int, long等类型,详见《C++ Primer》第二章2.2节。但给指针赋值应该是地址,即&i,VS2010下编译错误也会提示:不可将int 类型赋给int *类型。
最后也感谢3楼的提醒与质疑。[/quote]
首先,用编译器来验证串字面值的类型本身就是不对的,更何况你用的是VS2010之类的编译器。如果能用编译器来说明问题,那么,对于以下代码,我用gcc和clang得到的结果和你的不同,你又如何解释:
printf("%d, %d\n", sizeof (const char *), sizeof "hello!");
另外,你这个const也不知从何而来。建议你在gcc上试试这个:
"hello!"[0] = 1;
尽管它是未定义的,但毕竟它不会告诉你"hello!"[0]是只读对象。
其它用语不严谨的问题就不说了。串字面值到底是什么,还得看标准。[/quote]
好吧,既然如此,我只能拿出经典来证明了,在《C++ Primer》第4章4.3节C风格字符串中明确提到:”字符串字面值的类型就是const char 类型的数组"
还有你这样公开地说楼主大哈瓜,是不是太不考虑别人感受了?[/quote]
用编译器解释不了,就用教材来解释?《C++ Primer》没看过,不知道是不是经典,但很多人认为谭浩强的C也很经典,是不是可以用谭浩强的书来解释呢?
言归正传,你至少承认串字面值是数组了。不过,这个const,C和C++是不一样的。你需要明确地解释,串字面值的类型到底是不是const限定的。不要再用《C++ Primer》,那是C++,而且不是所有人都承认它是经典。
最好的办法是引用C标准文档中的条文来解释,而不是用别的书或者编译器,那都是靠不住的。
PS:我认为楼主的确是大哈瓜。int *names[] = {"abxd", "sefh"};
3、整形字面值常量可以为int, long等类型,详见《C++ Primer》第二章2.2节。但给指针赋值应该是地址,即&i,VS2010下编译错误也会提示:不可将int 类型赋给int *类型。
最后也感谢3楼的提醒与质疑。[/quote]
首先,用编译器来验证串字面值的类型本身就是不对的,更何况你用的是VS2010之类的编译器。如果能用编译器来说明问题,那么,对于以下代码,我用gcc和clang得到的结果和你的不同,你又如何解释:
printf("%d, %d\n", sizeof (const char *), sizeof "hello!");
另外,你这个const也不知从何而来。建议你在gcc上试试这个:
"hello!"[0] = 1;
尽管它是未定义的,但毕竟它不会告诉你"hello!"[0]是只读对象。
其它用语不严谨的问题就不说了。串字面值到底是什么,还得看标准。[/quote]
好吧,既然如此,我只能拿出经典来证明了,在《C++ Primer》第4章4.3节C风格字符串中明确提到:”字符串字面值的类型就是const char 类型的数组"
还有你这样公开地说楼主大哈瓜,是不是太不考虑别人感受了?int *names[] = {"abxd", "sefh"};
3、整形字面值常量可以为int, long等类型,详见《C++ Primer》第二章2.2节。但给指针赋值应该是地址,即&i,VS2010下编译错误也会提示:不可将int 类型赋给int *类型。
最后也感谢3楼的提醒与质疑。[/quote]
首先,用编译器来验证串字面值的类型本身就是不对的,更何况你用的是VS2010之类的编译器。如果能用编译器来说明问题,那么,对于以下代码,我用gcc和clang得到的结果和你的不同,你又如何解释:
printf("%d, %d\n", sizeof (const char *), sizeof "hello!");
另外,你这个const也不知从何而来。建议你在gcc上试试这个:
"hello!"[0] = 1;
尽管它是未定义的,但毕竟它不会告诉你"hello!"[0]是只读对象。
其它用语不严谨的问题就不说了。串字面值到底是什么,还得看标准。int *names[] = {"abxd", "sefh"};
3、整形字面值常量可以为int, long等类型,详见《C++ Primer》第二章2.2节。但给指针赋值应该是地址,即&i,VS2010下编译错误也会提示:不可将int 类型赋给int *类型。
最后也感谢3楼的提醒与质疑。