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

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

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

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

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

  1. c语言字符串 从后拷贝,C语言字符串拷贝

    C语言字符串拷贝利用指针操作,要清楚知道指针的指向 代码如下: #include #include #include char* my_strcpy1(char* dest, const char* ...

  2. c语言 字符串 strncpy,详解c语言中的 strcpy和strncpy字符串函数使用

    详解c语言中的 strcpy和strncpy字符串函数使用 strcpy 和strcnpy函数--字符串复制函数. 1.strcpy函数 函数原型:char *strcpy(char *dst,cha ...

  3. c语言字符串输出瘕b,c语言课件10tt函数(1)幻灯片资料(51页)-原创力文档

    第 5 讲 ;第 8 章 函 数;引例 1;引例2b;m1=cmpmax( a , b ); cmpmax(int x , int y ){ int z; z=x>y?x:y; return ( ...

  4. c语言字符串算法判断实验原理,C语言第二次实验报告

    一.实验题目,设计思路,实现方法 第十一次作业(二维数组): 11-5 打印杨辉三角(20 分) 本题要求按照规定格式打印前N行杨辉三角. 输入格式: 输入在一行中给出N(1≤N≤10). 输出格式: ...

  5. c语言字符串未初始化strcat,C语言中字符串常用函数strcat与strcpy的用法介绍

    strcpy原型声明:extern char *strcpy(char* dest, const char *src); 头文件:#include 功能:把从src地址开始且含有NULL结束符的字符串 ...

  6. c语言字符串连接符作用,C语言strcat()函数:字符串连接(拼接)

    关于bootstrap和响应式布局 bootstrap导入 首先需要安装好插件 然后就是在代码器写导入代码 代码如下 x86汇编程序基础(AT&amp;T语法) 一.简单的汇编程序 以下面这段 ...

  7. c语言字符串反转栈,【C语言】利用栈将数组中字符串逆序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include"stdio.h" #include"stdlib.h" #define STACK_INIT_S ...

  8. 大学C语言字符串题目,[转载]大学C语言考试题精选

    一. 填空题(每题2分,共20分) 1. C语言基本数据类型有:_______________________________: 构造类型有:_____________________________ ...

  9. c语言字符串转成二进制,C语言中字符串如何转换为二进制、八进制、十进制、十六进制...

    在C语言某个程序当中需要把文本16进制转换成对应的16进制数,比如字符串"0x1a"转换成10进制的26,可以用以下函数来实现 相关函数: atof, atoi, atol, st ...

  10. c语言字符串算法判断实验原理,C语言词法分析器实验报告

    <C语言词法分析器实验报告>由会员分享,可在线阅读,更多相关<C语言词法分析器实验报告(22页珍藏版)>请在人人文库网上搜索. 1.计算机科学与工程系编译原理课程设计实验报告姓 ...

最新文章

  1. 背包问题之我的思考一
  2. Windows 下用VS2012(Visual Studio 2012)编译librtmp
  3. html的细节优化,网站页面优化细节详解
  4. Django自定义分页、bottle、Flask
  5. 象棋正确的学习步骤是什么?入门和提高方法全都教给你!
  6. IOUtils工具类的依赖maven
  7. 服务器基础设置:服务器设置PXE启动,
  8. 关于 java中的换行符
  9. 计算机网络基础之广域网
  10. 第52届世界标准日,细数我国密码标准化工作成果
  11. Unity3d+C#斗地主学习探究1
  12. vue:不同环境配置不同打包命令
  13. FileZilla的下载与安装以及简单使用(有图解超简单)
  14. SSAS Tabular
  15. esp32-cam摄像头+远程遥控小车
  16. day1 计算机简史(概念)②
  17. Fortran语法汇总(上)
  18. LeetCode 每日一题 1833. 雪糕的最大数量
  19. 移远 BC35-G 模块固件升级
  20. 检测中质量监督常见的数个问题

热门文章

  1. 三控开关接线方式记录
  2. oracle 查询数据库中所有表名
  3. TensorFlow学习之LSTM ---机器翻译(Seq2Seq + Attention模型)
  4. 电商数仓项目系列一:数据仓库简介
  5. showCase(new String('A'));
  6. Ubuntu ifconfig命令eth0没有IP 解决方法
  7. 如何为VMware vcenter server的网卡eth0配置静态IP?
  8. 房间虚拟样板间vr制作及价格
  9. NBA赛事 PHP调用示例代码
  10. linux实时线程调度bug,Linux实时调度 - kworker线程无法运行并导致性能影响