有两种方法(至少)在C中初始化一个数组.有什么区别
int array[] = {1,2,3,4,5,6,7,8,9} ;
Run Code Online (Sandbox Code Playgroud)
和:
int array[100] = {1,2,3,4,5,6,7,8,9} ;
Run Code Online (Sandbox Code Playgroud)
我并不是指内存分配方式.也许引发这个问题的事情会有用,以便理解我的问题.
我希望通过迭代来获得int数组的长度.这是代码:
#include <stdio.h>
#include <stdlib.h>
int array[] = {1,2,3,4,5,6,7,8,9} ;
int i = 0 ; // i is length
while( array[i] ) {
printf("%d\n" , array[i] ) ;
i++ ;
}
printf("%d\n" , i) ;
Run Code Online (Sandbox Code Playgroud)
我注意到当我使用array []时,由于某种溢出,长度有时是错误的,但是当我使用数组[100]时,长度总是正确的.这两者有什么区别?它与'\ 0'字符有关吗?
当您创建数组而未指定其大小时,编译器会从初始化程序中推断出它(在这种情况下,长度将为9).数组之后的内存位置具有未指定的内容,因为没有人为他们提供特定的值,这就是为什么你得到"溢出"行为 - 这是技术上未定义的行为,但结果是编译器供应商实现的一种非常常见的方式"不确定".
当您显式指定大小时,编译器使用您提供的元素初始化数组,然后用零填充剩余空间.
在这两种情况下,行为都符合标准.