c语言字符串数组函数参数,C语言/C++ 数组作为函数参数

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

我们知道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++中还有一种类型叫做引用。引用也可以传入函数。

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也是能得到期待结果的。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值