c - C中的数组是否向后引用?

标签 c arrays

<分区>

Possible Duplicate:
How to create an array of string in C?

在我的 Last question 中我写了下面几行代码

#include <stdio.h>
int main(void){
  char str1[] = {'f','i'};
  char str2[] = {'s','e'};
  char str3[] = {'t','h'};
  char *arry_of_string[] = {str1,str2,str3};
  printf("%s\n",arry_of_string[1]);
}  

感谢人们指出我应该在字符串末尾的 '\0' 处。我学会了这样做的正确方法。我很好奇错误代码的结果:

安全

我记得在 C 引用书中,指针寻找 '\0' 我认为没有 \0 终止符,结果应该是:

seth 因为 str3 是数组中的下一个元素。谁能从数组的内部结构上解释一下为什么?

最佳答案

C 不对内存中变量的顺序做出任何保证。然而,它确实保证结构成员按顺序在内存中布局,第一个成员位于结构的偏移量 0 处。

所以你正在做的是测试未定义的行为,它可能会随着编译器版本、编译选项甚至月相而随时改变。不要依赖未定义的行为。不要对你的编译器进行逆向工程。大部分是无用的知识,在你的简历长得太长之前就会过时,并且只会在你必须与其他编译器打交道时引起意外。

如果您想了解 C 的工作原理,请阅读唯一的权威来源,ISO C 标准。不接受替代品(除了 maybe,Kernighan,Ritchie,“The C Programming Language,第二版。”)

关于c - C中的数组是否向后引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11687827/

相关文章:

c++ - 为什么我将两个短整数相乘得到一个负数?

c - 丢弃 C 数组中的重复元素/超出数组边界

c - 有没有什么工具可以把C转J2ME?

c - C 中 printf() 的格式说明符 %a

arrays - Swift 类型与显式解包类型

python - 使用另一个数组搜索一个数组

arrays - 将带有空格的输入作为 bash 数组中的单个元素

python - 可以将 Python 与英特尔 Atom Developer SDK (C/C++) 结合使用吗?

php - 如何将php中的数组值插入到sql数据库中

c - 无法将二维 float 组分配给指针到指针到浮点