gpt4 book ai didi

c - C 中 *ptr += 1 和 *ptr++ 的区别

转载 作者:太空狗 更新时间:2023-10-29 16:14:34 25 4
gpt4 key购买 nike

我刚开始学C,在做一个关于将指针传递给指针作为函数参数的例子时,我发现了一个问题。

这是我的示例代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int* allocateIntArray(int* ptr, int size){
if (ptr != NULL){
for (int i = 0; i < size; i++){
ptr[i] = i;
}
}
return ptr;
}

void increasePointer(int** ptr){
if (ptr != NULL){
*ptr += 1; /* <----------------------------- This is line 16 */
}
}

int main()
{
int* p1 = (int*)malloc(sizeof(int)* 10);
allocateIntArray(p1, 10);

for (int i = 0; i < 10; i++){
printf("%d\n", p1[i]);
}

increasePointer(&p1);
printf("%d\n", *p1);
p1--;
free(p1);
fgets(string, sizeof(string), stdin);
return 0;
}

问题出现在第16行,当我将*ptr+=1修改为*ptr++时。预期结果应该是整个数组和数字 1,但是当我使用 *ptr++ 时,结果是 0。

+=1++ 有区别吗?我以为他们两个是一样的。

最佳答案

不同之处在于运算符的优先级。

后自增运算符++ 的优先级高于取消引用运算符*。所以*ptr++等同于*(ptr++)。换句话说,后增量修改的是指针,而不是它指向的内容。

赋值运算符+=的优先级低于解引用运算符*,所以*ptr+=1等价于( *ptr)+=1。换句话说,赋值运算符修改了指针指向的值,并没有改变指针本身。

关于c - C 中 *ptr += 1 和 *ptr++ 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35306391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com