...,你必须将数组大小传递给函数。 (注意:另一种做法是将指针传递给数组的开头,指针指向数组末尾的位置。两个指针的区别在于数组的长度,结果代码更简单。)
我无法在说明中写下它所说的代码。任何人都可以帮助我吗?
答案 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));
}