新浪天气入口:请教c语言问题(先谢谢了!)

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/02 00:11:55
呵呵 再请教下
char *string="hello";
另:
char *string;
*string="hello";
为什么前面的没错,后面的却错了
后面的错还好说,那前面的呢?为什么没错哈?

第一个当然是对的
char * string = "hello";
第二个当然是错的
char * string;
string = "hello";
原因:*string 是个字符指针变量,第一个是变量赋初值,定义的时候就赋值,所以可以是 char * string = "hello"; 第二个是先定义再赋值,所以 string = "hello"; string 前面的*不能要。
(注意:赋给string 的不是字符窜 hello,而是 字符窜 hello的第一个字符 h 的地址)

如果 int *p = &a;

那么是相当于
int *p;
p = &a;

而不是

int *p;
*p = &a;

楼主的情况也是类似的。

初学者经常性错误!

char *string="hello"; 这个是变量初值化并将"hello"的首地址 赋给string
另:
char *string; 这个并没有初值化,只声明string为char指针, 指针string指向一个随机地址!
*string="hello" 这个等式只是赋值,将字符串类型赋给一个指针类型!当然出错啦!

如果要在程序中赋值,就先要对 string 分配内存,再用strcpy 函数来赋值就安全了!

char * string = "hello";

char * string;
string = "hello";

是这样的

我觉得错误的原因是*string是个表达式,而表达式是不能赋值的。

在变量的定义中*号是类型说明符,而在其他时候*号是取内容符。由于你定义的是一个字符串,而string指向的只是字符串中的第一个元素,所以*string只能存入一个字符,而不能存入整个字符串。