整数数组 [10] = {1 , 2, 0, 3} 。我怎样才能发现这里有4个元素?我知道如何找到数组的大小
int array[10] = {1 , 2, 0, 3} . How can I find out that there are 4 elements here? I know how to find the size of array
我试过这段代码。如您所见,问题是空元素为零。所以,我试着检查一下,但问题是我可以将 0 作为一个元素。
int main()
{
int array[10] = {1, 2, 0, 3, 4};
printf("%d\n", sizeof(array)/ sizeof(*array)); // This is the size of array
int i = 0;
while(array[i] != 0 && i < 10) {
i++;
};
printf("%d\n", i);
return 0;
}```
首先将数组设置为输入范围之外的数字。像一个负数。
for(i = 0;i < 10;i++)
array[i] = -1;
或设置为INT_MAX
或INT_MIN
你不能。 int array[10]
将始终创建一个包含 10 个元素的数组,您无法询问编译器已分配了哪些元素。
你可以做的是 int array[] = {1, 2, 0, 3, 4}
然后编译器会为你推断出元素的数量,你将得到 sizeof(array)/ sizeof(*array) == 5
int array[10] = {1 , 2, 0, 3} . How can I find out that there are 4 elements here?
你怎么能说那里有 4 个元素,因为你声明 int array[10]
有 10 个元素的大小。这意味着,你已经知道没有。的元素。此外,在这种情况下,您不能使用 if
语句来确定编号。你可能知道在 C 中,如果你用少于 10 个值初始化一个包含 10 个元素的数组,其余元素将自动分配给 0。
您有多种选择:
- 您知道初始值设定项中有多少个元素,因此您创建了另一个存储该数字的变量:
int array[10] = {1, 2, 0, 3, 4};
int num_items = 5;
您需要在将 "add" 或 "remove" 项目更新到数组时更新 num_items
。如果您将数组视为堆栈(仅在最高索引处添加或删除),那么这很简单:array[num_items++] = 7; // adds 7 after 4
...
x = array[--num_items]; // x gets 7, 7 is "removed" from the array, need special
// case logic for element 0
- 您选择了一个 不是 有效的值(例如
-1
)并显式初始化其余元素:int array[10] = {1, 2, 0, 3, 4, -1, -1, -1, -1, -1 };
- 您为初始化程序调整数组大小,这意味着它只能存储那么多元素:
int array[] = {1, 2, 0, 3, 4};
否则,如果您需要一个可以随着项目的添加或删除而增长或缩小的容器,则需要使用不同的数据结构(例如链表)。
我试过这段代码。如您所见,问题是空元素为零。所以,我试着检查一下,但问题是我可以将 0 作为一个元素。
int main()
{
int array[10] = {1, 2, 0, 3, 4};
printf("%d\n", sizeof(array)/ sizeof(*array)); // This is the size of array
int i = 0;
while(array[i] != 0 && i < 10) {
i++;
};
printf("%d\n", i);
return 0;
}```
首先将数组设置为输入范围之外的数字。像一个负数。
for(i = 0;i < 10;i++)
array[i] = -1;
或设置为INT_MAX
或INT_MIN
你不能。 int array[10]
将始终创建一个包含 10 个元素的数组,您无法询问编译器已分配了哪些元素。
你可以做的是 int array[] = {1, 2, 0, 3, 4}
然后编译器会为你推断出元素的数量,你将得到 sizeof(array)/ sizeof(*array) == 5
int array[10] = {1 , 2, 0, 3} . How can I find out that there are 4 elements here?
你怎么能说那里有 4 个元素,因为你声明 int array[10]
有 10 个元素的大小。这意味着,你已经知道没有。的元素。此外,在这种情况下,您不能使用 if
语句来确定编号。你可能知道在 C 中,如果你用少于 10 个值初始化一个包含 10 个元素的数组,其余元素将自动分配给 0。
您有多种选择:
- 您知道初始值设定项中有多少个元素,因此您创建了另一个存储该数字的变量:
您需要在将 "add" 或 "remove" 项目更新到数组时更新int array[10] = {1, 2, 0, 3, 4}; int num_items = 5;
num_items
。如果您将数组视为堆栈(仅在最高索引处添加或删除),那么这很简单:array[num_items++] = 7; // adds 7 after 4 ... x = array[--num_items]; // x gets 7, 7 is "removed" from the array, need special // case logic for element 0
- 您选择了一个 不是 有效的值(例如
-1
)并显式初始化其余元素:int array[10] = {1, 2, 0, 3, 4, -1, -1, -1, -1, -1 };
- 您为初始化程序调整数组大小,这意味着它只能存储那么多元素:
int array[] = {1, 2, 0, 3, 4};
否则,如果您需要一个可以随着项目的添加或删除而增长或缩小的容器,则需要使用不同的数据结构(例如链表)。