您的位置:首页 > 其它

关于指针的一个小问题

2011-09-08 21:27 246 查看
设char s[6],*ps=s;,则正确的赋值语句是(  )

A.s="12345"; B.*s="12345";
C.ps="12345"; D.*ps="12345";

C是正确的赋值语句,但是这个赋值和LZ想象的不一样。

C/C++ code

char s[6]; // 在栈上开一个字符数组
char *ps = s; // 定义一个字符指针,指向s所在的位置
ps = "12345"; // 把ps指向常量数据区的一个字符串。注意!!这以后ps就和s再也没有关系了
printf("%s\n", ps); // 输出12345
printf("%c",s[1]); // 没准会输出什么,也可能没输出。因为s这块内存根本就没赋值,不知道是什么内容

A.s="12345";    //编译有问题的肯定就是这个了。s是个数组,不能用作左值
B.*s="12345";   // 编译器会把"12345"所在的常量数据区的位置转换成unsigned long,再转换成char,然后赋值给s[0]。这里应该有个warning,因为把指针转换成整数就很可疑,32位转换成8位可能丢失数据
D.*ps="12345";  // 同B。结果是ps[0]被赋值。这里的ps[0]、s[0]、*s、*ps都是一回事
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编译器 c