我创建了一个数组并将值放入数组中,如下所示
int *ptr_int;
int list_int[10];
int i;
for (i=0; i<10; i++)
list_int[i] = i + 1;
我将一个值分配到list_int
数组中,如此
list_int[17] = 18;
当我尝试获取数组的数量时,如下所示
int size = sizeof(list_int ) / sizeof( int );
printf( "The size of int is %d.\n", size);
结果只有10
。
我怎样才能获得阵列室数?
答案 0 :(得分:6)
结果只有10个。
这是真正的大小。分配给list_int[17]
是未定义的行为,并且它不会神奇地扩展数组。
答案 1 :(得分:1)
list_int[17] = 18;
这是未定义的行为,因为数组大小只有10。
请注意,除了可变长度数组之外,sizeof
运算符是编译时运算符。 sizeof(list_int )
和sizeof(int)
的结果在编译时确定。
要实现具有动态大小的数组,您需要动态分配数组,您可能会发现realloc
非常有帮助。
答案 2 :(得分:1)
您已使用以下定义将数组的最大大小定义为10
int list_int[10];
您无法为list_int[17]
分配值。因为您定义的数组list_int[17]
的内存不足list_int[10]
。
您只能为0到9
中的元素赋值答案 3 :(得分:1)
创建动态数组(在运行时分配)
int n;
scanf("%d",&n); // read n from the user at run time
int* x=(int*)malloc(sizeof(int)*n); // where n is the number of elements you need to allocate
////// after that you can access the array (x) using indexer
///// reading loop
for(int i=0;i<n;i++)
scanf("%d",&x[i]);
=============================================== ================================
注意:如果需要更多动态数据结构,可以为每个条目分配内存 你可以使用链接列表