gpt4 book ai didi

char 数组和指针——有人可以解释以下输出吗?

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

我试图理解数组和指针之间存在的特殊关系,即没有方括号的数组名总是指向数组的第一个元素。

在 Linux 系统上,我用 C 程序得到这个:

char name[7] = "unique";

printf("\nAddress stored of name: %p", name);
printf("\nAddress stored of name: %s", name); //Conflict
printf("\nAddress of name[0]: %p", &name[0]);

//dereferencing the pointer
printf("\nValue of name[0]: %c", *name);
printf("\nValue of name[1]: %c", *(name+1));

输出是:

Address stored of name: 0xbff68131
Address stored of name: unique
Address of name[0]: 0xbff68131
Value of name[0]: u
Value of name[1]: n

除了代码行的输出为//Conflict 之外,我理解上面输出中的所有内容。换句话说,如果根据数组和指针之间的特殊关系,name 等同于 &name[0],那么为什么要简单地更改格式说明符(从 %p 到 % s) 打印数组的实际值。如果真是这样,那是否意味着 name&name[0]*name 都是等价的?

我至少希望它(//冲突)打印一些其他(垃圾?)值而不是数组的实际值。

最佳答案

%s

这告诉 printf 将参数视为指向包含字符数组的内存位置的指针,并打印每个字符,直到遇到 \0

%p

如您所见,这会将参数视为内存位置并以十六进制打印其值。

你所说的“冲突”实际上是迄今为止更重要的用途,并且是打印 c 字符串的正确方法。

关于char 数组和指针——有人可以解释以下输出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15214976/

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