关于C的疑惑

1.为什么字符串无法直接赋值给字符数组

为什么上面错误,下面正确,这是因为当把字符串赋值给某个变量时,其实是把字符串的首地址给那个变量,既然是地址,那肯定只能给指针变量了,char names[] 是一个字符数组,char *names[]是字符型的指针数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
char names[] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali",
};


char *names[] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali",
};

同样类似的还有下面这样的情况

1
2
3
4
5
6
7
8
9
10
11
typedef struct {
char name[];
int price;
}Book;

Book book1;
book1.price = 20;
book1.name = "english";

//上面的将会编译出错,原因同上,正确的方式应该是
strcpy(book1.name,"english");

2.类型决定了变量存储的布局

我们知道类型会影响变量占用空间的大小,如int占用4个字节,char占用一个字节,可是,类型是如何决定布局的呢,布局指的是什么?又有哪些不同的布局方式?