搜尋

首頁  >  問答  >  主體

c++ - C语言传参如何直接传进一个新数组去?

就像JAVA一样,

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

全部回覆(4)我來回復

  • 黄舟

    黄舟2017-04-17 14:41:42

    C雖然不能把數組當作參數傳入,但還是可以像這樣在傳參時創建一個「無名」數組:

    #include <stdio.h>
    
    void print_string(char str[])
    {
      puts(str);
    }
    
    int main()
    {
      print_string((char []) {"anonymous"});
      return 0;
    }

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 14:41:42

    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

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 14:41:42

    雷雷

    回覆
    0
  • 迷茫

    迷茫2017-04-17 14:41:42

    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[]是参数数组,用来接收命令行参数.

    回覆
    0
  • 取消回覆