c++ - C语言传参如何直接传进一个新数组去?
高洛峰
高洛峰 2017-04-17 14:39:42
[C++讨论组]

就像JAVA一样,

test(new String[] {"1", "2"});
static void test(String[] args) {
}
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(4)
黄舟

C虽然不能把数组作为参数传入,但还是可以像这样在传参时创建一个“无名”数组:

#include <stdio.h>

void print_string(char str[])
{
  puts(str);
}

int main()
{
  print_string((char []) {"anonymous"});
  return 0;
}
怪我咯

c语言只能传指针,就是数组的首地址~


void a(int* array);
void b(int array[]);

函数声明时,int* arrayint array[] 是等价的,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

ringa_lee
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[]是参数数组,用来接收命令行参数.
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号