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也是能得到期待结果的。
但是我们可以明显的看到,我们函数声明中。引用的参数限定了数组的大小。也就是说不能动态的规定数组的大小。这就显得数组的引用非常鸡肋了。
总的来说,呵呵不是不会写的。
c语言字符串数组函数参数,C语言/C++ 数组作为函数参数相关推荐
- c语言字符串 从后拷贝,C语言字符串拷贝
C语言字符串拷贝利用指针操作,要清楚知道指针的指向 代码如下: #include #include #include char* my_strcpy1(char* dest, const char* ...
- c语言 字符串 strncpy,详解c语言中的 strcpy和strncpy字符串函数使用
详解c语言中的 strcpy和strncpy字符串函数使用 strcpy 和strcnpy函数--字符串复制函数. 1.strcpy函数 函数原型:char *strcpy(char *dst,cha ...
- 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 ( ...
- c语言字符串算法判断实验原理,C语言第二次实验报告
一.实验题目,设计思路,实现方法 第十一次作业(二维数组): 11-5 打印杨辉三角(20 分) 本题要求按照规定格式打印前N行杨辉三角. 输入格式: 输入在一行中给出N(1≤N≤10). 输出格式: ...
- c语言字符串未初始化strcat,C语言中字符串常用函数strcat与strcpy的用法介绍
strcpy原型声明:extern char *strcpy(char* dest, const char *src); 头文件:#include 功能:把从src地址开始且含有NULL结束符的字符串 ...
- c语言字符串连接符作用,C语言strcat()函数:字符串连接(拼接)
关于bootstrap和响应式布局 bootstrap导入 首先需要安装好插件 然后就是在代码器写导入代码 代码如下 x86汇编程序基础(AT&T语法) 一.简单的汇编程序 以下面这段 ...
- c语言字符串反转栈,【C语言】利用栈将数组中字符串逆序
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include"stdio.h" #include"stdlib.h" #define STACK_INIT_S ...
- 大学C语言字符串题目,[转载]大学C语言考试题精选
一. 填空题(每题2分,共20分) 1. C语言基本数据类型有:_______________________________: 构造类型有:_____________________________ ...
- c语言字符串转成二进制,C语言中字符串如何转换为二进制、八进制、十进制、十六进制...
在C语言某个程序当中需要把文本16进制转换成对应的16进制数,比如字符串"0x1a"转换成10进制的26,可以用以下函数来实现 相关函数: atof, atoi, atol, st ...
- c语言字符串算法判断实验原理,C语言词法分析器实验报告
<C语言词法分析器实验报告>由会员分享,可在线阅读,更多相关<C语言词法分析器实验报告(22页珍藏版)>请在人人文库网上搜索. 1.计算机科学与工程系编译原理课程设计实验报告姓 ...
最新文章
- 背包问题之我的思考一
- Windows 下用VS2012(Visual Studio 2012)编译librtmp
- html的细节优化,网站页面优化细节详解
- Django自定义分页、bottle、Flask
- 象棋正确的学习步骤是什么?入门和提高方法全都教给你!
- IOUtils工具类的依赖maven
- 服务器基础设置:服务器设置PXE启动,
- 关于 java中的换行符
- 计算机网络基础之广域网
- 第52届世界标准日,细数我国密码标准化工作成果
- Unity3d+C#斗地主学习探究1
- vue:不同环境配置不同打包命令
- FileZilla的下载与安装以及简单使用(有图解超简单)
- SSAS Tabular
- esp32-cam摄像头+远程遥控小车
- day1 计算机简史(概念)②
- Fortran语法汇总(上)
- LeetCode 每日一题 1833. 雪糕的最大数量
- 移远 BC35-G 模块固件升级
- 检测中质量监督常见的数个问题
热门文章
- 三控开关接线方式记录
- oracle 查询数据库中所有表名
- TensorFlow学习之LSTM ---机器翻译(Seq2Seq + Attention模型)
- 电商数仓项目系列一:数据仓库简介
- showCase(new String('A'));
- Ubuntu ifconfig命令eth0没有IP 解决方法
- 如何为VMware vcenter server的网卡eth0配置静态IP?
- 房间虚拟样板间vr制作及价格
- NBA赛事 PHP调用示例代码
- linux实时线程调度bug,Linux实时调度 - kworker线程无法运行并导致性能影响