c - C 中的指针 - int 数组 VS char 数组

标签 c arrays pointers

我知道有人问过类似的问题,但这个问题是特定于数组的。

我可以做到这一点:

char *names[] = { "John", "Paul", "George", "Ringo" };

然后:

printf("%s\n", names[0]);

那么为什么这不起作用?:

int *numbers[] = { 11, 12, 13, 14 };

printf("%d\n", numbers[0]);

谢谢

最佳答案

字符串文字具有字符数组类型。例如,字符串文字 "John" 的类型为 char[5](字符串文字包括终止零)。

在表达式数组中使用时,很少有异常(exception),会被转换为指向其第一个元素的指针。

你可以想象这个声明

char *names[] = { "John", "Paul", "George", "Ringo" };

喜欢

char *names[] = { &"John"[0], &"Paul"[0], &"George"[0], &"Ringo"[0] };

因此,数组 names 由字符串文字的第一个字符的有效地址初始化。

至于这个声明

int *numbers[] = { 11, 12, 13, 14 };

然后数组 numbers 由无效地址值(如 11、12 等)初始化,这些地址值不指向实际对象。

你可以这样写

int i = 11, j = 12, k = 13, l = 14;

然后

int *numbers[] = { &i, &j, &k, &l };

在这种情况下,数组将由有效地址初始化。

对于 printf 调用,该函数的设计方式是,当遇到转换说明符 s 时,该函数将相应的参数视为零地址-终止字符串并尝试输出该字符串。

而转换说明符d用于输出int类型的对象。因此,例如,如果您想输出 numbers[0] 指向的整数,那么您应该编写

printf("%d\n", *numbers[0] );

关于c - C 中的指针 - int 数组 VS char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47855963/

相关文章:

c - "nothing"在任何编程语言中都代表什么?

javascript - 循环卡在第一个区间

java - 如何将 jsonobject 添加到我想要的 jsonarray 中

c - char* 作为函数的返回类型有什么作用或意义?

c - 减少C中二维连接的时间

c - bison: 为什么在 Action 中打印常量时结果是错误的?

C - 指向一个字符

arrays - 矩阵 block 索引

c++ - 返回对象数组的函数

c - strcmp 如何在没有 * 运算符的情况下比较地址处的值?