【问题标题】:IF Int array variable return address of first element of int array then why char array variable not return address of first element? (in C Prog.)如果 Int 数组变量返回 int 数组第一个元素的地址,那么为什么 char 数组变量不返回第一个元素的地址? (在 C 程序中)
【发布时间】:2023-01-20 17:47:05
【问题描述】:

Here, i attached code image 它如何对待 char 数组?

如果图像不清晰,请参考此代码 ` #include <stdio.h>

int main() {
    char c[3] = {'s', 'a', 'h'};
    int a[3] = {1, 2, 3};
    printf("%c\n", c);
    printf("%d\n", a);
    return 0;
}`

我试过这段代码但没有得到预期的结果。可能我的期望是错误的,但想知道为什么会这样。

【问题讨论】:

  • 在启用警告的情况下编译,然后注意这些警告。 c -> c[0] 等。投票关闭简单的拼写错误。
  • 虽然这已经得到回答,但将来您应该在问题中包括实际结果和预期结果。我会帮你的。
  • 预期的结果是什么?要打印两个数组的所有元素?你需要一个循环。另外,don't post images of code

标签: arrays c pointers printf implicit-conversion


【解决方案1】:

在这段代码中

char c[3] = {'s', 'a', 'h'};
int a[3] = {1, 2, 3};
printf("%c
", c);
printf("%d
", a);

printf 的调用中使用的数组指示符ca 被隐式转换为指向它们类型为char *int * 的第一个元素的指针。事实上你有

printf("%c
", &c[0]);
printf("%d
", &a[0]);

来自 C 标准(6.3.2.1 左值、数组和函数指示符)

3 除非它是 sizeof 运算符或一元 & 的操作数 运算符,或者是用于初始化数组的字符串文字,一个 类型为“类型数组”的表达式被转换为 类型为“指向类型的指针”的表达式指向初始值 数组对象的元素并且不是左值。如果数组 对象有寄存器存储类,行为未定义。

但是转换说明符 cd 相应地期望类型为 charint 的对象。

你必须改写

printf("%c
", *c);
printf("%d
", *a);

那是一样的

printf("%c
", c[0]);
printf("%d
", a[0]);

【讨论】:

    猜你喜欢
    • 2017-10-09
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多