C:指针混乱
|
我了解这是基本内容的一部分,但我被卡住了:-(
有人可以帮帮我吗?
程序1:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=1,b=2,c;
c=(a+b)++;
}
为什么输出错误?需要左值吗?
程式2:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *p1=\"name\";
char *p2;
p2=(char*)malloc(20);
memset(p2,0,20);
while(*p2++=*p1++);
printf(\"%s\\n\",p2);
}
为什么输出为空字符串?如果我颠倒递增顺序,即::2ѭ,为什么左值误差会出现?
没有找到相关结果
已邀请:
4 个回复
醒荒捆府绣
表示“将“4ѭ的值增加1”。 但是,您不能递增
,因为它不是变量。您期望在以下代码中发生什么?
显然应该打印第一个“ 7” a = 1,b = 2,a + b = 3 但是第二个呢? a =?,b =?,a + b = 4 如果我们增加总和,不清楚a或b应该是什么。 至于第二个问题,请记住,复制数据时要更改ѭ8,所以当您要求打印出它指向的内容时,它指向的是字符串的末尾,而不是字符串的末尾。开始。 进行字符串复制的一种更简单的方法是使用
,如下所示:
请注意,这仅是安全的,因为您知道
中字符串的大小不大于
中的大小。如果不确定字符串的大小(例如,如果从用户输入中获取字符串),则需要小心,如Wikipedia所述。 至于为什么
不起作用,而
却起作用: Postfix-
的优先级高于
。这表示,17ѭ表示
。 所以
是相同的
同时,
表示
,或““8ѭ指向的任何数字,加一”。 同样,如果您说了话,您也会遇到问题:
您希望该打印什么?如果有的话,它应该显示9,因为您要告诉编译器“ 25”。 但是,您不能指望C编译器能够解决该方程式,因此,为了保持语言的简单高效,禁止这种事情。
豆兢
不是左值-您想如何向加法结果(右值)分配一些内容-++ /-运算符确实分配新值。
您p2指向字符串末尾的
。您需要在循环之前存储指向p2的原始地址:
济畦刨
运算符不适用于临时变量。
是临时的。
您在这里增加
。循环之后,“ 8”不再指向最后一次“ 37”调用返回的存储块的开头。
甲车劲
产量: