C语言问题。。。急 char *ss[6];ss[1]="right?" char ss[6][20];ss[1]="right?" int k[2][3],*pk[3]; pk=k

char *ss[6];ss[1]="right?"char ss[6][20];ss[1]="right?"int k[2][3],*pk[3];pk=k[0];这个是错的char *ss[6];ss[1]="right?"这个怎么是对的啊?还有结构体名不是地址对不?结构体引用中哪些是地址?那些是名称?ps->sex名称s[0].age名称但是如果name[10]那么s[0].name就是地址是不是?
2026年09月25日 15:17
有2个网友回答
网友(1):

你好!!!
首先纠正上面的错误:
char ss[6][20];
ss[1]="right?"//这语句是错误的
int k[2][3],*pk[3];
pk=k[0];//这个也是是错的

我们来看看:
char *ss[6];ss[1]="right?"为什么是对的??
首先char *ss[6];是声明了一个指针数组ss,ss有6个元素,6个元素都是指针变量,ss[1]="right?"其中ss[1]是数组的第一个元素(是指针元素哦),ss[1]="right?"表示在静态存储区(内存的一种)放入字符串,并把字符串所在内存的首地址付给指针变量ss[1],是指针变量指向字符串“right?"这样赋值是符合语法的,但是:
c语法不允许char ss[20];ss[20]="hello",但是允许在声明的时候就初始化即char ss[20]="hello"。

可以理解了吧。

2.结构体名字就和int 类似都是一样类型,用来定义变量的,不是什么地址。
首先我猜想你所说的结构大概是:
struct A
{
char sex;
int age;
char name[10];
、、、、、
、、、、、

}
struct A *ps//定义结构体类型的指针变量
那么ps->sex就是表示对象的成员,不是地址。
同样ps->age也是如此:
但是ps->name,就不一样了,这表示对象的成员数组名,我们已经知道数组名就是地址啦,所以ps->name就是地址,那么输入姓名的时候就可以scanf("%s",ps->name);而不是scanf("%s",&ps->name);

网友(2):

这题不对的