gpt4 book ai didi

c - 指针移动 cs[1] 和 *cs++ 有什么区别

转载 作者:行者123 更新时间:2023-12-05 01:29:59 24 4
gpt4 key购买 nike

我正在尝试了解指针的移动方式。以下是程序,我知道如果

int cs={1,2,3};  

然后cs指向cs[0]我不清楚的是 *cs 指向什么。

#include<stdio.h>
int main()
{
int array[] = { 1, 2, 3, 4, 5 };
int *arrptr1 = array;
int *arrptr = array;
int i;
for (i = 0; i < sizeof(array) / sizeof(int); i++) {
printf("%d, %d, %d\n", array[i], *arrptr1++, *arrptr + i);
}
}

上面程序的输出是

1, 1, 1
2, 2, 2
3, 3, 3
4, 4, 4
5, 5, 5

那么我的理解*arrptr应该增加存储在的值

*arrptr

应该增加 1。我观察到指针正在移动到下一个位置。所以只想知道我的理解有什么问题?

更新
根据下面的回复,我明白了

print("%d", *arrptr1++);

在这样的语句中,运算符的计算是从右到左的。因此,在 *arrptr1++ 中,++ 将首先被评估,然后是 arrptr,然后是 *所以为了确认我写了另一个程序

#include<stdio.h>
int main()
{
int array[] = { 10, 20, 30, 40, 50 };
int *q1 = array;
printf("q1 = %p\n",q1);
printf("*q1++ = %d\n",*q1++);
printf("q1 = %p\n",q1);
printf("*q1++ = %d\n",*q1);
}

上述程序的输出与上述逻辑预期的运算符优先级不同。我得到的输出是

q1 = 0x7ffffcff02e0
*q1++ = 10
q1 = 0x7ffffcff02e4
*q1++ = 20

所以我期待在第二行输出而不是 *q1++ = 10 之后 *q1++ = 20那么运算符的优先级不是从右到左发生的吗?

最佳答案

*arrptr1++ 被解析为 *(arrptr1++),而不是 (*arrptr1)++

关于c - 指针移动 cs[1] 和 *cs++ 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6450619/

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