这样给指针数组赋值不仅语法不对,逻辑也不妥!一来scanf函数似乎没有提供接收指针的专门格式控制字符串;由于指针也就是地址,是一个无符号整型数据,所以应该用%d或%x或%X来控制,用%s显然是错误的。二来若s是指针数组,那么s[i]仍然只是个元素,而scanf是要求用元素地址的。所以scanf(“%s”,s[i]);似乎应该为scanf("%d",&s[i]);或scanf("%x",&s[i]);或scanf("%x",&s[i]);才对。第三,给一个指针手工赋值是不提倡的,因为手工输入的地址可能侵犯到系统的敏感部位而造成不可预知的后果。所以在下认为不这样做为好。
楼上的回答是错误的,你的那样就可以了,因为它本身就是指针,还取什么地址呢,但有个问题,你必须对应的给它开辟一个空间才可以,比如,char a[5];s[0] = a才可以,否则还是不行
因为这是个指针,指针保存的是地址,地址怎么能由用户手动输入呢?(比如:float *p; cin>>p;//用户输入了1.1,首先对编译器来说,是类型不匹配,怎么能把float型数据赋给float*型呢?再者有1.1这个地址吗?地址都是整数吧,就算换成了整型也是行不通的,不是由用户来说某某地址存数据的,假如你定义了int i=10;你能指定10存放在哪吗?这还是由系统来分配指定的,你仔细想想,这个表达起来有点绕口)只有已经定义了的一个变量,在内存中有了数据,它才有了地址,才能把这个地址赋给指针 。 cout<<*p[i]<
给你举个例子
#include
using namespace std;
void main(void)
{
int * p[3];
int data[3]={1,2,3};
for(int i=0;i<3;i++)
{
p[i]=&data[i]; //给指针数组赋值
cout<
}
scanf("%s",&s[i]);就可以了,一定要有&,来指定一个地址值;
可以试着用gets()函数给指针赋值
例如
char *p[3],ter[3][20];
int i;
for(i=0;i<3;i++)
p[i]=gets(ter[i]);