c 字符串初始化

来源:百度知道 编辑:UC知道 时间:2024/07/07 05:31:38
为什么
char data[20]="hello";
是正确的
char data[20];
data="hello";
是错的
第二种方法该怎样改
请问
char data[20];和char *data;
的具体区别
请高手指教啊!!!

char data[20] = "hello";
分配20个字符的内存,然后为前6个元素赋值;

char data[20];
data = "hello"; // 这句企图对数组进行赋值,但是c语言并不支持这种操作
可以这样修改,data[0] = 'h', data[1] = 'e', ......

补充部分:
char data[20]; // 分配20个字符的内存空间,一般是连续的内存地址
char* data; // 声明一个指针型的变量,这时候只为这个指针本身分配了内存空间(一般是4个字节);当实用语句 data = new char[n];时,才会分配内存空间,这时候data变量本身存储的值就是新分配的内存的首地址。

char data[20];
data="hello";
先解释这个为什么是错的,因为data="hello"; 实际上就是data[0]="hello";是 data字符数组的首个字符,很显然不能放字符串。

至于两者的区别,后者可以可以更方便通过指针来访问修改删除元素。
char *data;
data = "hello"; 这句中的data是指针变量,指向"hello"这个字符串在内存中的首地址。

char data[20]
数组名可以看做指针 它指向数组的第0个单元,类型是char *, 所指向的类型是数组单元的类型即 char
它是一个常量指针,该指针的类型是 char * 该指针自己占有单独的内存区,它和数组第0号单元占据的内存区是不同的。其指针的值是不能修改的。

而 char* data则是变量 指向是可变的

char data[20]

执行后,data 指向一个固定的值(数组的首地址),所以不能在对data赋值,因为它是一个常量

char *da