为什么在这种情况下输出为“0”? #包括 内部主(空) { int i; int*p=(int*)malloc(5*sizeof(int)); 对于(i=0;i
为什么在这种情况下输出为“0”? #包括 内部主(空) { int i; int*p=(int*)malloc(5*sizeof(int)); 对于(i=0;i,c,post-increment,C,Post Increment,#include <stdio.h> int main(void) { int i; int *p = (int *) malloc(5 * sizeof(int)); for (i=0; i<10; i++) *(p + i) = i; printf("%d ", *p++); return 0; } 是否有下列情况: printf("%d ", *++ptr); 取消引用ptr,得到ptr[0] 打印出步骤1
#include <stdio.h>
int main(void)
{
int i;
int *p = (int *) malloc(5 * sizeof(int));
for (i=0; i<10; i++)
*(p + i) = i;
printf("%d ", *p++);
return 0;
}
是否有下列情况:
printf("%d ", *++ptr);
ptr
,得到ptr[0]
int
,即ptr[0]
ptr
因此它指向ptr[1]
ptr[1]
请使用:
printf("%d ", *ptr++);
请注意,它是后增量。因此,后缀
++
运算符的返回值是操作数本身的值,然后作为副作用,操作数对象的值将递增
表达式*ptr++
将
*ptr
*ptr
的值用作printf(“%d”,*ptr);
ptr=ptr+1
*
的优先级相同。两者的关联性是从右向左*
和前缀+++。后缀+++的关联性是从左到右printf("%d ", *++ptr);
您的优先部分是对的,但是让我们看看后缀增量运算符属性,好吗
C11
标准在第§6.5.2.4章后缀递增和递减运算符中说明
后缀++
运算符的结果是操作数的值。作为一种副作用,操作数对象的值会递增(即,将适当类型的值1添加到它)。[…]
因此,变量本身将经历增量的影响,但变量所在的语句(带有后缀增量)将使用变量的现有值,而不是增量值。增量将在后面的部分作为副作用执行。首先,您应该添加
#include
。其次,您应该更正代码int*p=(int*)malloc(10*sizeof(int));
。那么*p++
代表1.printf*p;2.p++
。如果你想得到值1,你应该使用codeprintf(“%d”,*+++p”);
。我希望这能对你有所帮助。请输入malloc()的返回值和家庭在C
中。以上帖子中给出的答案主要是说我们必须编写不必要的代码,这与我的问题有什么关系?你需要#包括。*p++
是否会被视为*(p++)
?因为++
和*
具有相同的优先级,关联性将从右到左。@ameyCU:简而言之:没有。这里有很长的原因(来自C11Draft 6.5.2.4/2):“后缀++运算符的结果是操作数的值。作为一种副作用,操作数对象的值会增加(即,将适当类型的值1添加到其中)。有关约束、类型和转换以及操作对指针的影响的信息,请参阅加法运算符和复合赋值的讨论。在更新操作数存储值的副作用之前,对结果的值计算进行排序。”这里的关键词:“副作用”@ameyCU:你对结果的看法是对的,但实际上后缀运算符(包括增量)的优先级高于一元运算符(如解引用)。@alk是的。我知道了。谢谢你。