gpt4 book ai didi

C指针: Explain the program concept

转载 作者:行者123 更新时间:2023-11-30 21:15:22 25 4
gpt4 key购买 nike

我正在学习指针基础知识。请看一下我的示例代码并告诉我发生了什么。

void main()
{
int i, *j;
i = 2;
j = i;
printf("%d", j);
printf("\n%d", j + 1);
printf("\n%d", j + 2);
}

我的输出是

2 6 10

请解释一下..

最佳答案

您看到的输出是因为您分配了地址 0x02指向指针j当你写j + 1时您将其增加 1与将其地址增加 sizeof(int) 相同或sizeof(*j)这是相同的。

但该行为实际上是未定义的,就像 commented here 一样。最初由@Filipe Gonçalves ,并回复my question -here通过@Kninnug

C11 §6.5.6/8:

[..] If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined. [..]

您可以查看官方文档以了解更多信息。

还有,你的printf()调用是导致未定义行为的原因。您应该使用 %p 打印指针说明符并将指针强制转换为 void * ,如果您希望分配正确,您还应该将地址转换为 int *为了让它发挥作用。

类型转换 i(int *)如果您的系统是 64 位,也可能不够。

线路

j = i;

如果您取消引用j,可能会导致未定义的行为.

您不应该以这种方式将整数分配给指针,也许您的意思是

j = &i;

否则,在启用编译警告的情况下,编译器应该警告您错误的赋值,尽管它是有效的,但不正确

<小时/>

注意:main()返回int ,并且您已将其声明/定义为不返回值。

关于C指针: Explain the program concept,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32668216/

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