gpt4 book ai didi

c - 在 C 中为整数指针赋值

转载 作者:行者123 更新时间:2023-11-30 20:03:53 29 4
gpt4 key购买 nike

我对代码的某些变体遇到了一些麻烦。

int *p = 5;
printf("%d\n", *p);

输出:SEGMENTATION FAULT

int *p = 5;
printf("%d\n", p);

输出:5

这里发生了什么?

最佳答案

注意:这个答案只是为了帮助OP更好地理解指针(我希望),而不是真正回答问题本身。

让我们创建一个小工作程序来显示指针和值之间的差异:

#include <stdio.h>

int main(void)
{
int i = 5; // Define a variable, initialize it with a value
int *p = &i; // Define a pointer, make it point to the location of the variable i

printf("The value of i is %d\n", i); // Should be pretty obvious

// Dereference the pointer, fetching the value stored in the variable i
// Will say the value of *p is 5, because *p is actually the variable i
printf("The value of *p is %d\n", *p);

// Print the address of i, the location of the variable in memory
printf("The location of the variable i is %p\n", (void *) &i);

// Print the address of i again, using the pointers value
printf("The value of p is %p\n", (void *) p); // Note: No dereferencing

// Print the address of the variable p, i.e. where p is stored in memory
printf("The location of the variable p is %p\n", (void *) &p); // Note use of address-of operator &

return 0;
}

变量的实际地址(位置),即最后三个 printf 调用实际打印的内容,会有所不同。变量的位置取决于编译器和操作系统。

<小时/>

更“图形化”一点,可以看到这样的东西:

+----------------------------------+| the variable i, contents equal 5 | <--\+----------------------------------+    || the variable p, contents depends | ---/+----------------------------------+

从上面的“图像”中,变量p指向变量i

<小时/>

现在是重要的部分:如果您想取消引用指针,即如果您想获取其指向的内容,则指针必须指向有效位置。如果没有,那么您将出现未定义的行为

但是,只要您不尝试取消引用它,使用任何随机值初始化指针本身就不是问题。

关于c - 在 C 中为整数指针赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46266938/

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