美文网首页
C语言/C++ 数组作为函数参数

C语言/C++ 数组作为函数参数

作者: 百工之人 | 来源:发表于2019-05-29 11:00 被阅读0次

    前几天帮别人解决数组拼接问题(类似字符串拼接)时想到这个专题。因为她的代码太糟糕。

    我们知道C、C++中的数组是没有拷贝(复制)运算的,除非编译器支持。因为C语言发明的初衷是替换汇编语言,要知道你用不同指令集的机器就要用不同的汇编语言。。。(此处省略800字议论文)

    我们想一想,当我们声明定义一个数组时,定义了数组的哪些

        int array[10] = {0};
    

    从上面的代码中我们可以得知数组的类型是int, size是10
    所以我们使用参数传递函数时,就必须将类型大小两个信息传递给函数。

    C语言有两种方式可以实现:

    字符串数组:

    我们知道C语言中的字符串其实就是字符串(const char *str = "PHP IS THE BEST!";)数组。并且初学这也知道字符串是以\0结尾的。
    对于字符串数组,通常\0后面的数据都不重要啊。
    我们只需要把数组的地址(same as第一个元素的地址)传递给函数。
    如果我们需要字符数组的size(其实不是size,确切的说是length),只需要strlen函数即可(后面的数据who cares)。

    char str[20] = "hello world";
    
    void function(char *str);
    void function2(const char *str);
    

    其他的数组:

    对于其他数组我们只需要传递数组的第一个元素数组的长度即可。

    int array[10] = {0};
    
    void function(int *arr, int size);
    void function2(const int *arr, int size);
    
    void function3(const int arr[], int size);
    void function4(int arr[], int size);
    

    当然调用的时候可能并不需要整个数组:

    function3(array+1, 5);
    

    这种情况就需要注意指针不要变成野指针。

    可以参考我初学C++时候的文章

    你以为就这样结束了吗?

    在C++中还有一种类型叫做引用。引用也可以传入函数。

    
    void output(int n) {cout << n << ' ';}
    
    void print(const int (&array)[10]) {
        for_each(array, array+10, output);
    }
    
    int main(int, char **) {
        int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        print(array);
    
        return 0;
    }
    

    即使我们在print函数中使用sizeof也是能得到期待结果的。
    但是我们可以明显的看到,我们函数声明中。引用的参数限定了数组的大小。也就是说不能动态的规定数组的大小。这就显得数组的引用非常鸡肋了。

    总的来说,呵呵不是不会写的。

    相关文章

      网友评论

          本文标题:C语言/C++ 数组作为函数参数

          本文链接:https://www.haomeiwen.com/subject/sgfetctx.html