问题描述
就像JAVA一样,
test(new String[] {'1', '2'});static void test(String[] args) {}
问题解答
回答1:C虽然不能把数组作为参数传入,但还是可以像这样在传参时创建一个“无名”数组:
#include <stdio.h>void print_string(char str[]){ puts(str);}int main(){ print_string((char []) {'anonymous'}); return 0;}回答2:
c语言只能传指针,就是数组的首地址~
void a(int* array);void b(int array[]);
函数声明时,int* array 和 int array[] 是等价的,array只能是指针。前两个完全一样,还可以写成 :
void d(int const* array);
这也是一样的,数组在c中被作为const pointer传递。
在下面的例子中,可以看到,arr都是指向同一个地址。
#include <stdio.h>void arr_p(int* arr){ printf('%dt%dn', arr, &arr[0]);}void arr_a(int arr[]){ printf('%dt%dn', arr, &arr[0]);}void arr_10(int arr[10]){ printf('%dt%dn', arr, &arr[0]);}int main(){ int arr[20]={0};//20个元素 arr_p(arr); arr_a(arr); arr_10(arr);//这里并不会检查数组是否超过10个元素 printf('%dt%dn', arr, &arr[0]); getchar(); return 0;}
至于 @萝卜大师 的例子,我在vs2010中试了一下,提示语法错误。也许,是我哪个地方没做对?
另外,吐槽一下,评论的赞是不加分的,楼主没必要吝啬到连这个都取消了吧~ :D
回答3:int sum(int* arr){ // Do something return 0; }int a[5] = {1,3,2,4,5};sum(a);回答4:
C程序默认用来接收参数的argv(argument vector)就是一个字符串数组.char *argv[] = {'str1', 'str2'};
#include <stdio.h>int main(int argc, char *argv[]) { fprintf(stderr,'argc: %dn',argc); int i; for(i=0;i<argc;i++) {fprintf(stderr,'argv[%d]: %sn',i,argv[i]); } return 0;}编译: gcc ab.c -o ab运行: ./ab -c10 -n500 http://127.0.0.1/index.php结果:argc: 4argv[0]: ./abargv[1]: -c10argv[2]: -n500argv[3]: http://127.0.0.1/index.phpargc是参数个数,*argv[]是参数数组,用来接收命令行参数.

