将数组的大小传递给函数

时间:2011-09-22 07:09:19

标签: c

...,你必须将数组大小传递给函数。 (注意:另一种做法是将指针传递给数组的开头,指针指向数组末尾的位置。两个指针的区别在于数组的长度,结果代码更简单。)

我无法在说明中写下它所说的代码。任何人都可以帮助我吗?

6 个答案:

答案 0 :(得分:8)

问题是如果你不能将数组传递给函数。执行此操作时,数组的名称“衰减”为指向其第一个元素的指针。这意味着您不再知道该数组的大小,因为您只能传递指向该数组中元素的指针。所以你必须传递一个大小,所以接收“数组”的函数知道它有多长。

e.g。

//the below declaration is even the same as e.g.
//void foo(unsigned char array[4], size_t length)
//the array notation doesn't really apply to a function argument list
//it'll mean a pointer anyhow.
void foo(unsigned char *array, size_t length)
{
    size_t i;
    for(i = 0; i < length ; i++) {
       printf("%02X ", array[i]);
    }
}

或者,如果您将一个元素传递给数组末尾,则传递指针:

void bar(unsigned char *array, unsigned char *end)
{
     while(array != end) {
       printf("%02X ", *array);
       array++;
    }
}

你称之为

unsigned char data[] = {1,2,3,4};
foo(data,sizeof data); //same as foo(&data[0], siseof data);
bar(data, data + 4); //same as bar(&data[0], &data[4]);

答案 1 :(得分:1)

假设我们有这个整数数组:

#define CAPACITY 42
int foo[CAPACITY];

这两个处理它的函数:

void func1(int* begin, int* end) {
    // Loop over the array
    while(begin < end) {
        int val = *begin++; // process element
    }
}

void func2(int* begin, int size) {
    // Loop over the array
    for(int i = 0; i < size; ++i) {
        int val = begin[i]; // process element
    }
}

第一个将被称为func1(foo, foo + CAPACITY):传入指向数组开头的指针,以及指向最后一个元素之外的指针。

第二个将被调用为func2(foo, CAPACITY):传入一个指向数组开头和数组大小的指针。

由于指针算法的工作原理,两个版本都是等价的。

答案 2 :(得分:1)

这样的事情:

int accumulate( int *first, int *last )
{
  int result = 0;

  for( ; first != last; ++first ) {
    result += *first;
  }

  return result;
}

int main()
{
  int arr[] = {1,2,3,4,5};
  int sum = accumulate( arr, arr + 5 );

  return 0;
}

上面的代码汇总了[first, last)范围内的所有元素;其中first包含在范围内且last被排除在外。因此,您需要将指针传递到要求求和的范围的开头,将另一个指针传递到要添加到总和的最后一个元素之后的一个位置。

答案 3 :(得分:0)

void f(int* arr, int len) { ... }

void f(int* start, int* end) { ... }

答案 4 :(得分:0)

如果您只想传递数组大小,可以将以下内容传递给函数:

function(sizeof(array)/sizeof(array[0]));

答案 5 :(得分:0)

 int A[] = {1,2,3,4,5,6,7,8,9,0};
 printf("Size of the Array %d \n", sizeof(A)/sizeof(int));//size of the array


you can use this value to function 

void getSize(int A[], size_t size){
//do somthing
}

void function()
{
//from where you call this 
 int A[] = {1,2,3,4,5,6,7,8,9,0};
 getSize(A, sizeof(A)/sizeof(int));
}