gpt4 book ai didi

c - 如何理解字符串变量?它们同时是字符串和指针吗?

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

#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[]) {
char str[] = "hello";
printf("%s, %p", str, str);
return 0;
}

上面的代码给出了输出

hello, 0x7fff5fbff7aa

令我困惑的是,为什么str可以同时是字符串和指针?我知道字符串是指向char 的指针。所以我认为str只是一个指针

但是编译器怎么知道 %s 给出了 str 指向的字符串呢?

编译器是这样工作的吗?

附言

我想当我们将 %c%i 用于 char 变量时,我们会得到不同的情况输出。

最佳答案

在这段代码中,str 是一个数组。数组和指针是不同的。您可以创建一个指向数组元素的指针。

在代码中 printf("%s, %p", str, str); str 的两种用法实际上都需要一个指向第一个元素的指针阵列。您可以编写 &str[0] 来表达相同的意思,但从一开始在 C 语言中就是一个设计决定,在大多数情况下编写数组的名称实际上会请求这样的指针。

printf 函数被定义为如果它看到 %s 则它跟随(取消引用)相应的指针并打印出字符,直到它到达空终止符。如果它看到 %p,那么它会打印出指针本身的某种表示形式(而不是指针指向的内容)。

关于c - 如何理解字符串变量?它们同时是字符串和指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38966128/

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