就像JAVA一样,
test(new String[] {"1", "2"}); static void test(String[] args) { }
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
C虽然不能把数组作为参数传入,但还是可以像这样在传参时创建一个“无名”数组:
#include <stdio.h> void print_string(char str[]) { puts(str); } int main() { print_string((char []) {"anonymous"}); return 0; }
c语言只能传指针,就是数组的首地址~
c
void a(int* array); void b(int array[]);
函数声明时,int* array 和 int array[] 是等价的,array只能是指针。前两个完全一样,还可以写成 :
int* array
int array[]
void d(int const* array);
这也是一样的,数组在c中被作为const pointer传递。
在下面的例子中,可以看到,arr都是指向同一个地址。
#include <stdio.h> void arr_p(int* arr){ printf("%d\t%d\n", arr, &arr[0]); } void arr_a(int arr[]){ printf("%d\t%d\n", arr, &arr[0]); } void arr_10(int arr[10]){ printf("%d\t%d\n", arr, &arr[0]); } int main(){ int arr[20]={0};//20个元素 arr_p(arr); arr_a(arr); arr_10(arr);//这里并不会检查数组是否超过10个元素 printf("%d\t%d\n", arr, &arr[0]); getchar(); return 0; }
至于 @萝卜大师 的例子,我在vs2010中试了一下,提示语法错误。也许,是我哪个地方没做对?
另外,吐槽一下,评论的赞是不加分的,楼主没必要吝啬到连这个都取消了吧~ :D
int sum(int* arr){ // Do something return 0; } int a[5] = {1,3,2,4,5}; sum(a);
C程序默认用来接收参数的argv(argument vector)就是一个字符串数组.char *argv[] = {"str1", "str2"};
#include <stdio.h> int main(int argc, char *argv[]) { fprintf(stderr,"argc: %d\n",argc); int i; for(i=0;i<argc;i++) { fprintf(stderr,"argv[%d]: %s\n",i,argv[i]); } return 0; } 编译: gcc ab.c -o ab 运行: ./ab -c10 -n500 http://127.0.0.1/index.php 结果: argc: 4 argv[0]: ./ab argv[1]: -c10 argv[2]: -n500 argv[3]: http://127.0.0.1/index.php argc是参数个数,*argv[]是参数数组,用来接收命令行参数.
C虽然不能把数组作为参数传入,但还是可以像这样在传参时创建一个“无名”数组:
c
语言只能传指针,就是数组的首地址~函数声明时,
int* array
和int array[]
是等价的,array只能是指针。前两个完全一样,还可以写成 :
这也是一样的,数组在
c
中被作为const pointer传递。在下面的例子中,可以看到,arr都是指向同一个地址。
至于 @萝卜大师 的例子,我在vs2010中试了一下,提示语法错误。也许,是我哪个地方没做对?
另外,吐槽一下,评论的赞是不加分的,楼主没必要吝啬到连这个都取消了吧~ :D
C程序默认用来接收参数的argv(argument vector)就是一个字符串数组.
char *argv[] = {"str1", "str2"};