关于指针数组初始化

weiryou10 2014-04-21 10:56:38
刚刚学到这,看书上的例子,是关于char类型的指针数组的,可以这样初始化

char *names[]={"zhangsan","lisi","wangwu"};
这样,每个指针指向对应的字符串

那请问,对于其他类型的指针来说,能用同样的方法初始化吗

int *nums[]={1,2,3,4,5};

这样的行吗
...全文
231 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
均陵鼠侠 2014-04-22
  • 打赏
  • 举报
回复
引用 2 楼 u010470077 的回复:
不可以。指针的初始化或赋值可以使用0值常亮表达式和类型匹配的对象的地址。 如上,字符串字面值常量类型为const char *,与指针类型匹配,可赋值。但整形字面值常量并不是int类型,故而不可赋给int *类型指针
你有什么证据证明串字面值的类型是const char *? 你有什么证据证明整型常量1、2、3、4、5不是int类型?
均陵鼠侠 2014-04-22
  • 打赏
  • 举报
回复
引用 7 楼 u010470077 的回复:
[quote=引用 5 楼 sholber 的回复:] [quote=引用 4 楼 u010470077 的回复:] [quote=引用 3 楼 sholber 的回复:] [quote=引用 2 楼 u010470077 的回复:] 不可以。指针的初始化或赋值可以使用0值常亮表达式和类型匹配的对象的地址。 如上,字符串字面值常量类型为const char *,与指针类型匹配,可赋值。但整形字面值常量并不是int类型,故而不可赋给int *类型指针
你有什么证据证明串字面值的类型是const char *? 你有什么证据证明整型常量1、2、3、4、5不是int类型?[/quote] 不好意思,昨晚太匆忙,以致出现回答错误。十分抱歉 首先楼主问题的正确解释应该为以下内容: 1、字符串字面值常量赋给指针时,会隐含地将此字符串内存单元首地址赋给指针。 2、字符串字面值常量的类型也确实为const char *类型,例如在VS2010中编写以下代码时,编译器报错时会提示字符串字面值常量为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]是只读对象。 其它用语不严谨的问题就不说了。串字面值到底是什么,还得看标准。[/quote] 好吧,既然如此,我只能拿出经典来证明了,在《C++ Primer》第4章4.3节C风格字符串中明确提到:”字符串字面值的类型就是const char 类型的数组" 还有你这样公开地说楼主大哈瓜,是不是太不考虑别人感受了?[/quote] 用编译器解释不了,就用教材来解释?《C++ Primer》没看过,不知道是不是经典,但很多人认为谭浩强的C也很经典,是不是可以用谭浩强的书来解释呢? 言归正传,你至少承认串字面值是数组了。不过,这个const,C和C++是不一样的。你需要明确地解释,串字面值的类型到底是不是const限定的。不要再用《C++ Primer》,那是C++,而且不是所有人都承认它是经典。 最好的办法是引用C标准文档中的条文来解释,而不是用别的书或者编译器,那都是靠不住的。 PS:我认为楼主的确是大哈瓜。
凡尘暮雪 2014-04-22
  • 打赏
  • 举报
回复
引用 5 楼 sholber 的回复:
[quote=引用 4 楼 u010470077 的回复:] [quote=引用 3 楼 sholber 的回复:] [quote=引用 2 楼 u010470077 的回复:] 不可以。指针的初始化或赋值可以使用0值常亮表达式和类型匹配的对象的地址。 如上,字符串字面值常量类型为const char *,与指针类型匹配,可赋值。但整形字面值常量并不是int类型,故而不可赋给int *类型指针
你有什么证据证明串字面值的类型是const char *? 你有什么证据证明整型常量1、2、3、4、5不是int类型?[/quote] 不好意思,昨晚太匆忙,以致出现回答错误。十分抱歉 首先楼主问题的正确解释应该为以下内容: 1、字符串字面值常量赋给指针时,会隐含地将此字符串内存单元首地址赋给指针。 2、字符串字面值常量的类型也确实为const char *类型,例如在VS2010中编写以下代码时,编译器报错时会提示字符串字面值常量为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]是只读对象。 其它用语不严谨的问题就不说了。串字面值到底是什么,还得看标准。[/quote] 好吧,既然如此,我只能拿出经典来证明了,在《C++ Primer》第4章4.3节C风格字符串中明确提到:”字符串字面值的类型就是const char 类型的数组" 还有你这样公开地说楼主大哈瓜,是不是太不考虑别人感受了?
均陵鼠侠 2014-04-22
  • 打赏
  • 举报
回复
楼主这个大哈瓜,问题没搞清楚就结帖了,还把分给了回答错误的人,无语鸟。
均陵鼠侠 2014-04-22
  • 打赏
  • 举报
回复
引用 4 楼 u010470077 的回复:
[quote=引用 3 楼 sholber 的回复:] [quote=引用 2 楼 u010470077 的回复:] 不可以。指针的初始化或赋值可以使用0值常亮表达式和类型匹配的对象的地址。 如上,字符串字面值常量类型为const char *,与指针类型匹配,可赋值。但整形字面值常量并不是int类型,故而不可赋给int *类型指针
你有什么证据证明串字面值的类型是const char *? 你有什么证据证明整型常量1、2、3、4、5不是int类型?[/quote] 不好意思,昨晚太匆忙,以致出现回答错误。十分抱歉 首先楼主问题的正确解释应该为以下内容: 1、字符串字面值常量赋给指针时,会隐含地将此字符串内存单元首地址赋给指针。 2、字符串字面值常量的类型也确实为const char *类型,例如在VS2010中编写以下代码时,编译器报错时会提示字符串字面值常量为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]是只读对象。 其它用语不严谨的问题就不说了。串字面值到底是什么,还得看标准。
凡尘暮雪 2014-04-22
  • 打赏
  • 举报
回复
引用 3 楼 sholber 的回复:
[quote=引用 2 楼 u010470077 的回复:] 不可以。指针的初始化或赋值可以使用0值常亮表达式和类型匹配的对象的地址。 如上,字符串字面值常量类型为const char *,与指针类型匹配,可赋值。但整形字面值常量并不是int类型,故而不可赋给int *类型指针
你有什么证据证明串字面值的类型是const char *? 你有什么证据证明整型常量1、2、3、4、5不是int类型?[/quote] 不好意思,昨晚太匆忙,以致出现回答错误。十分抱歉 首先楼主问题的正确解释应该为以下内容: 1、字符串字面值常量赋给指针时,会隐含地将此字符串内存单元首地址赋给指针。 2、字符串字面值常量的类型也确实为const char *类型,例如在VS2010中编写以下代码时,编译器报错时会提示字符串字面值常量为const char *,也符合类型匹配原则。
int *names[] = {"abxd", "sefh"};
3、整形字面值常量可以为int, long等类型,详见《C++ Primer》第二章2.2节。但给指针赋值应该是地址,即&i,VS2010下编译错误也会提示:不可将int 类型赋给int *类型。 最后也感谢3楼的提醒与质疑。
凡尘暮雪 2014-04-21
  • 打赏
  • 举报
回复
不可以。指针的初始化或赋值可以使用0值常亮表达式和类型匹配的对象的地址。 如上,字符串字面值常量类型为const char *,与指针类型匹配,可赋值。但整形字面值常量并不是int类型,故而不可赋给int *类型指针
mujiok2003 2014-04-21
  • 打赏
  • 举报
回复
不可以

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧