c++指针数组初始化问题

char *p[]={"aaa","bbb"};
这样在定义p的时候完成了初始化
那int *p1[]={1,2}
为什么不可以?
如何在定义p1的时候进行初始化?
还是只能在定义后通过循环进行?

指向整型数的指针数组
int *p1[] = {NULL, NULL};
是没有问题的。原因在于,你申请指向字符的指针数组,数组中的元素是字符串,指针数组保存的是字符串首地址;而对于其他常量,你无法把地址给回,自然无法给指针数组赋值。而我给的NULL是一个空指针,就可以赋给指针数组了。

指针数组,元素只能保存指针
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-01-17
直接写在程序中的字符串,经过编译器处理以后是一个char*指针,直接写在程序中的数字,或者字符('a'、'b')是即时数直接送CPU处理。

{"aaa","bbb"}是字符串,所以编译器经过了编译器以后就变成了
char *临时变量1="aaa"
char *临时变量2="bbb"
所以char *p[]={"aaa","bbb"};变成 char *p[]={临时变量1,临时变量2}; ok

{1,2}是即时数 不做上述转换,所以出错。

事实上int *p1[]={1,2} 没有意义,它指向了地址为1、2的内存变量,会导致整个系统的数据混乱。

不过,C语言里似乎是允许int *p1[]={1,2}的。
第2个回答  2009-01-16
char *p[]={"aaa","bbb"};是定义字符型的指针数组,含有两个字符指针,字符型指针的初始化可以允许在定义时候直接赋值,意思是使指针指向"aaa"和"bbb" 两个字符串的空间,而int *p1[]={1,2},指向整型数的指针不能这样初始化
第3个回答  2009-01-17
这是C语言的不严谨的地方。
char *p[]={"aaa","bbbb"};
相当声明了有两个元素的指针数组。
"aaa" "bbbb" 是两个字符串常量,也分配了存放单元--常数区。
初始化,就是两个指针分别指向两个字符串常量的首地址。

不支持 int *p1[]={1,2}。
初始化,要么赋别的已声明了的变量地址,要么动态分配单元。
第4个回答  2009-01-16
#include<iostream.h>
void main()
{
int b[]={1,2,3};
int *p=b;
char *m[]={"aaa","bbb"};
cout<<p[0]<<endl;
cout<<m[0]<<endl;

}
这是我在vc++ 6.0上实验过的。我们老师曾经说过,指针和数字是相通的,如果定义了int的数组,指针应该指向数组的第一个。。。数组和指针又可以相互变化。至于为什么字符型指针的初始化可以,我认为上面的兄才解释的很好了。
相似回答