C:如何查找数组的大小?

时间:2015-10-16 08:29:35

标签: c arrays

我目前正在学习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.那么我怎样才能获得这个价值呢?谢谢。

5 个答案:

答案 0 :(得分:3)

C数组没有确切数量的元素属性,因此您必须自己保留这些信息并进行适当更新。例如,您可以定义如下结构:

struct ArrayWrapper
{
    int an_array[100];
    unsigned int num_of_elements;
};

您还可以编写一些方法来操作此类对象,如AddElement,RemoveElement(减少num_of_elements)等等。

答案 1 :(得分:1)

你不能 - C对此没有语言支持。通常,您有几个选择:

  • 自己跟踪数据的长度。
  • 在数组的末尾添加“sentinel值”,以便您可以知道它的位置。 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;
}