如果给定的函数是exp:那么如何计算给定的2d数组input2中的行数
void fun(char *input2[])
{
//calculate no of rows and in each row no of column
}
答案 0 :(得分:4)
一般没有。在C中,仅使用指针来计算数组的大小是不可能的。
但是,如果给出了限制,即数组以零(^)结束,则可以使用循环计算零之前的值的数量。如果它是一个指针数组(例如你有),那么终结符可以是指向特定值的指针。例如,指向零(^)的指针。
如果没有此限制,您必须将长度存储在变量中。
(^)您可以使用任何特定值,但零是指针和字符串的不错选择。
答案 1 :(得分:2)
在C中,数组参数衰减为简单指针,因此您必须设计函数以接受数组的长度:
void fun(char *input2[], int input2Len);
如果您还定义了一个数组长度宏,您可以像这样调用fun
:
#define LEN(arr) ((int) (sizeof (arr) / sizeof (arr)[0]))
char *strings[10];
...
fun(strings, LEN(strings));
答案 2 :(得分:0)
由于type function(type array[])
是指向它的第一个元素的指针,因此不可能知道传递给作为参数的数组的大小,以array
的形式。但是没有关于最后一个元素的信息。
克服这个问题。我们可以实施许多解决方案。其中一些可能会改变函数本身的实现,因为在第二个参数中传递数组的大小。但是如果我们想保持功能定义不变。留下两种可能性:
1)设置第一项的元素数量;
2)标记数组的结尾(通常是空项)
它几乎是第二个被采用最多的,这里是代码来说明:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int mySizeOfArray(char *input[]){
char **p=input; //p point to the first element of array
while(*p){
p++;//int crementing the pointer
}
return p-input;//return the difference between them
}
/*__________________________________________________________
*/
int main(){
char *input2[]={"First","Second","Third",/*Last*/NULL};
printf("Size of input=%d\n",mySizeOfArray(input2));
return 0;
}