0

我创建了一个数组并将值放入数组中,如下所示

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

我怎么能得到阵列房间的数量?

4

4 回答 4

6

结果只有10。

这才是真正的大小。分配给list_int[17]是未定义的行为,它不会神奇地扩展数组。

于 2013-10-08T07:59:34.343 回答
1
list_int[17] = 18;

这是未定义的行为,因为数组大小只有 10。

请注意,除了可变长度数组之外,sizeof运算符是编译时运算符。sizeof(list_int )和的结果sizeof(int)在编译时确定。


要实现具有动态大小的数组,您需要动态分配数组,您可能会发现它realloc很有帮助。

于 2013-10-08T08:01:07.767 回答
1

您已经使用以下定义将数组的最大大小定义为 10

int list_int[10];

您不能将值分配给list_int[17]. 因为您定义的数组list_int[17]的内存不足。list_int[10]

您只能从 0 .. 9 为元素赋值

于 2013-10-08T08:01:19.117 回答
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]);

==================================================== ==============================

注意:如果您需要更多可以为每个条目分配内存的动态数据结构,您可以使用链表

于 2013-10-09T10:27:40.140 回答