gpt4 book ai didi

你能解释一下 *ptr++ 和 *(++ptr) 之间的区别吗?

转载 作者:行者123 更新时间:2023-11-30 20:45:31 24 4
gpt4 key购买 nike

Possible Duplicate:
Pointer Arithmetic: ++*ptr or *ptr++?

我不明白有什么区别?下面是实现 *ptr++ 的代码示例

#include <stdio.h>
int my_array[] = {1,23,17,4,-5,100};
int *ptr;
int main(void)
{
int i;
ptr = &my_array[0]; /* point our pointer to the first
element of the array */
printf("\n\n");
for (i = 0; i < 6; i++)
{
printf("my_array[%d] = %d ",i,my_array[i]);
printf("ptr + %d = %d\n",i, *ptr++);

}
return 0;
}

输出为

my_array[0] = 1 ptr + 0 = 1
my_array[1] = 23 ptr + 1 = 23
my_array[2] = 17 ptr + 2 = 17
my_array[3] = 4 ptr + 3 = 4
my_array[4] = -5 ptr + 4 = -5
my_array[5] = 100 ptr + 5 = 100

当您将第二个 printf 语句更改为 printf("ptr + %d = %d\n",i, *(++ptr)); 时这成为输出:

my_array[0] = 1 ptr + 0 = 23
my_array[1] = 23 ptr + 1 = 17
my_array[2] = 17 ptr + 2 = 4
my_array[3] = 4 ptr + 3 = -5
my_array[4] = -5 ptr + 4 = 100
my_array[5] = 100 ptr + 5 = -1881141248

请有人详细解释一下其中的区别,以便我能够理解。

最佳答案

一个在获取指针指向的内容之前递增指针,另一个在从指针获取之后递增。

在第二个示例中,您在最后一次迭代中已经越过了数组的末尾,并且您正在打印(可能)紧随数组(或一些随机垃圾)之后的内存位置中的指针

关于你能解释一下 *ptr++ 和 *(++ptr) 之间的区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13999058/

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