gpt4 book ai didi

c - C 如何解释指针中的 int 以及为什么它与 char 指针不同?

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

#include<stdio.h>
void main()
{
int *c=12345;
printf("dec:%d hex:%x", c ,&c); // (1)
}

第 (1) 行打印

dec:12345  hex:8af123

其中8af123显然是随机且依赖于机器的地址。

当我输入时

printf("dec:%d", *c); // (1)

显然,它失败了。

所以我的问题是根据理论概念:

  • *c 应该包含值 12345,但事实并非如此。为什么?

在这段代码中:

#include<stdio.h>  
void main()
{
char *c='a';
printf("address store in c:%d value point by c:%c address of c:%x", c,*c ,&c); //Focus line
}

输出是:

adderess store in c:9105699 value point by c:a address of c:8af564
  • 为什么它将'a'存储在*c而不是c中?

我使用的是 gcc 编译器 4.4.3。

最佳答案

int *c=12345;

您刚刚创建了一个指向(可能)无效地址 12345 的指针.

如果您通过c (无 * )至 printf ,您正在传递指针本身。因此,printf只是看到数字 12345 ,并打印它。它无法知道那应该是一个指针。

如果您通过*c , 至printf ,您取消引用指针 - 您正在传递内存地址 12345 处的值.
由于这不是一个有效的地址,取消引用操作将在到达 printf 之前崩溃(准确地说,行为未定义)。 .

关于c - C 如何解释指针中的 int 以及为什么它与 char 指针不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16671401/

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