char *p[3]={"love","china",apple"}
此句分开来
char *a="love";
char *b="china";
char *c="apple";
char *p[3]={a,b,c};
也就是说指针数组是用来存放指针的,也可以把指针单独看成一个类型
指针数组可以输入字符串吗?
可以,毕竟指针数组也只是一个内存单元
scanf("%s",&p[i]);//此句是把字符串存入指针数组的本身
也就是scanf("%s",p[i]);合法吗?
语法上来说是合法的,但是p[i]指向的内存地址无效时,就会造成非法访问
scanf("%s",p[i]);//此句是把字符串存入指针数组元素所指向的内存地址
如
char a[100],b[100],c[100];
char *p[3];
p[0]=a;//指针初始化,让这p[0]指向有效的内存地址
p[1]=b;
p[2]=c;
for (i=0;i<3;i++)
{
scanf("%s",p[i]);
printf("%s\n",p[i]);
}
1.可以
2.合法
3.上面程序只有指针 未分配空间 所以出错~
指针没有初始化。。当然会出错了
#include
#include
void main()
{
int i;
char *p[3];
for (i=0;i<3;i++)
{
p[i] = (char *)malloc(sizeof(char)*256);
scanf("%s",p[i]);
printf("%s\n",p[i]);
}
}
//你没有给指针数组分配空间,下面是正确的程序。
#include
#include
void main()
{
int i;
char *p[3];
for (i=0;i<3;i++)
{
p[i]=new char[81]; //分配空间
scanf("%s",p[i]);
printf("%s\n",p[i]);
}
for (i=0;i<3;i++)
delete []p[i];//释放空间
}
1.加入头文件引用。
#include
2.在使用指针之前,为其分配内存空间。
p[i] = (char *)malloc(20);
3.代码如下。
#include
#include
void main()
{
int i;
char *p[3];
for (i=0;i<3;i++)
{
p[i] = (char*)malloc(20);
scanf("%s",p[i]);
printf("%s\n",p[i]);
}
}