首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >*ptr += 1与*ptr++在C中的区别

*ptr += 1与*ptr++在C中的区别
EN

Stack Overflow用户
提问于 2016-02-10 11:39:24
回答 2查看 19.5K关注 0票数 124

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

这是我的示例代码:

代码语言:javascript
复制
#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;
}

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

+=1++之间有什么不同吗?我以为他们两个是一样的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-10 11:45:40

差异是由于运算符的优先顺序造成的。

与取消引用操作符*相比,后增量操作符++具有更高的优先级。所以*ptr++等同于*(ptr++)。换句话说,post增量修改的是指针,而不是它所指向的对象。

赋值运算符+=的优先级低于取消引用运算符*,因此*ptr+=1等效于(*ptr)+=1。换句话说,赋值运算符会修改指针所指向的值,而不会更改指针本身。

票数 292
EN

Stack Overflow用户

发布于 2016-03-08 09:52:14

*ptr += 1: ptr指向的增量数据。*ptr++:指向下一个内存位置的增量指针,而不是指针所指向的数据。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35306391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档