这两种寻址方式有啥区别[关闭]

Posted

技术标签:

【中文标题】这两种寻址方式有啥区别[关闭]【英文标题】:what is the difference between these two type of addressing [closed]这两种寻址方式有什么区别[关闭] 【发布时间】:2014-05-17 08:20:01 【问题描述】:

这里即使基地址相同,为什么输出不一样,请在第一个printf语句中描述工作是如何完成的??

#include<stdio.h>
int main()
char c[2]="a";
printf("%c\n",c);
printf("%c",c[0]);
return 0;

【问题讨论】:

不同的是,这个printf("%c\n",c);的说法是错误的。 printf("%c", c) 用于打印char 类型。 c 属于 pointer 类型。 c[0]char 类型。 【参考方案1】:

在第一个printf() 语句中,您有未定义的行为。任何事情都有可能发生。在这种情况下,你很不走运,得到了一个你认为可以解释的结果(但实际上你不能:它是 UB)。

在第二个printf() 语句中(忽略UB 已经发生,因此整个程序无效),打印数组c 的第一个元素。

【讨论】:

解释更多,printf程序员来确保参数与说明符匹配。如果你弄错了,则会导致未定义的行为。一些友好的编译器可能会给出警告。 感谢您的宝贵时间,但您能否提供一个参考,我可以从中更深入地挖掘它。我是一个新手,并试图在这里建立我的概念,提前感谢@MattMcNabb 我通常的参考是POSIX.1-2008。有些人(包括我)也喜欢C99 Standard的文字。 在 C 标准中,“fprintf 函数”部分给出了完整的参考。但是,关于将参数与原型中 ... 的函数匹配的内容(其中 printf 是其中之一),您还需要阅读 6.5.2.2.#6-7(函数调用) Linux 手册页也有一些文档(尽管质量参差不齐)

以上是关于这两种寻址方式有啥区别[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

汇编语言中 加法(ADD)与带进位加法(ADC)有啥区别?

指令寻址方式主要是哪两种

这两种声明数组的方式有啥区别? [复制]

这两种在 JavaScript 中定义函数的方式有啥区别? [复制]

C ++类构造函数设置变量这两种方式有啥区别?

计算机中常用的寻址方式有哪几种