我目前正在学习C,我对如何找到数组的大小有疑问。至于字符串,我有一个指向字符串开头的指针,然后我不断查看是否有任何' \ 0'。如果有,那就停止。 例如:
char string[] = {'h', 'i', '\0', 'q', 'a'};
printf("%s", string);
而不是显示' hi \রa',它显示' hi'。
但是,我怎么知道数组的大小?我已经搜索了一段时间,大部分答案都是这样的:
int numArray[10] = {1, 2, 3, 4, 5};
printf("%d", sizeof(numArray)/sizeof(int));
我明白它是如何运作的。但是,通过这种方式,我们将始终将数组大小设置为10.这是有道理的,因为内存被分配用于在numArray中存储10个整数值。
但我真正想要的不是10,而是5.那么我怎样才能获得这个价值呢?谢谢。
答案 0 :(得分:3)
C数组没有确切数量的元素属性,因此您必须自己保留这些信息并进行适当更新。例如,您可以定义如下结构:
struct ArrayWrapper
{
int an_array[100];
unsigned int num_of_elements;
};
您还可以编写一些方法来操作此类对象,如AddElement,RemoveElement(减少num_of_elements)等等。
答案 1 :(得分:1)
你不能 - C对此没有语言支持。通常,您有几个选择:
'\0'
结尾。答案 2 :(得分:0)
sizeof
为您提供数组的字节数。 sizeof(array)/sizeof(type)
为您提供数组元素的数量。
对于静态声明的数组,只能调用sizeof,也就是说,在编译时已知大小。例如int myArray[10]
,其中10是“静态声明”。
您要问的是知道正在使用的阵列的大小。你给它10个元素,但只使用5.你必须自己跟踪它。
顺便说一句,C中的字符串(字符数组)定义为直到第一个\0
(空字符)的所有字符。因此,打印string
只会打印“hi”。
答案 3 :(得分:0)
当你要求计算机给你一个数组的大小时,它只能给你它知道的那个大小,它在内存中分配。 当您需要具有非零元素的数组大小时,这将有助于
请记住,计算机并不知道您需要整数/字符串或非零等值的计数。该条件受您的规则约束。
答案 4 :(得分:-1)
#include <stdio.h>
#define VALUES {1, 2, 3, 4, 5}
int main(void){
int numArray[10] = VALUES;
printf("%d\n", (int)(sizeof((int[])VALUES)/sizeof(int)));
return 0;
}