gpt4 book ai didi

c - s[ ] 是一个数组。&s 应该给出衰退指针的地址

转载 作者:行者123 更新时间:2023-11-30 20:23:33 25 4
gpt4 key购买 nike

初始化后字符数组名称和地址指向相同。 s[] 是一个数组。所以它衰减到指针s&s应该给出指针s的地址

#include <stdio.h>
int main()
{
char s[]="Get Organised! learn C!";
printf("%u %s\n",&s[2],&s[2] );
printf("%u %s\n",s,s ); /* This line and below line is equivalent*/
printf("%u %s\n",&s,&s ); /* Please Explain */
printf("%u %s\n",s[2],s[2] );
printf("%u %s\n",s[3],s[3] );
return 0;
}

%u 只是用来看看里面发生了什么。

最佳答案

首先摆脱未定义的行为:

int main() {
char const string [] = "hello";
printf("%p %p\n", (void *) string, (void *) &string);
return 0;
}

您得到(可能与目标相关)此处打印的相同地址,因为第一个表达式隐式转换为指向数组第一个元素的指针,而第二个表达式是指向整个数组的指针(这很可能发生在从第一个元素开始)

string == &(string[0]) // this is often called decaying

表达式 string 的类型(或更准确地说是它衰减到的表达式)是 char const *&string 的类型是char const (*array)[6],所以它们不“相同”。

&string不是指向指针的指针的原因很简单:C 标准明确禁止以运算符地址为前缀的数组表达式 (&) (或在 sizeof 运算符内)隐式转换为指针。

关于c - s[ ] 是一个数组。&s 应该给出衰退指针的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35925087/

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