c语言函数

c语言数组传递

人盡茶涼 提交于 2020-02-10 19:30:27
转自:http://blog.csdn.net/xgmiao/article/details/9570825 点击打开链接 数组作为函数实参: C 语言中数组作为函数实参时,编译器总是将其解析为指向数组首元素地址的指针 ( 地址调用 ) 原因:我们知道 C 语言函数的调用有传值和传地址调用。假设 C 语言对数组采用传值调用 ( 对实参作一份拷贝,传递给被调用函数,函数不能修改实际实参值,而只能改变其拷贝 ) ,然后如果拷贝整个数组,则在时间和空间上开销都非常大。而对于函数,只要知道实参数组的首元素的地址,照样可以访问整个数组,所以采用传址调用效率更高。 注意的一点是对于函数来说,其接受的是数组首元素的地址,所以它是并不知道数组的大小的。 一维数组作函数实参: [cpp] view plain copy #include <stdio.h> void fun( char *p) { printf( "%d\n" , sizeof (p)); char c = p[3]; } void fun( char a[10]) { printf( "%d\n" , sizeof (a)); char c = a[3]; } void fun( char a[]) { printf( "%d\n" , sizeof (a)); char c = a[3]; } void main( int

C语言寒假作战02

北城余情 提交于 2020-02-08 16:53:20
2.2.1作业标题 这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2019-2/homework/10267 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-2/homework/10257 这个作业的目标 学习制作一个简单的菜单程序 作业正文 https://www.cnblogs.com/zscnb/p/12256739.html 其他参考的文献 百度搜索 C语言程序设计 2.2.2 设计思路和遇到的问题 请写上你的心路历程和程序设计思路,并在其中写下你遇到的问题 思路: 先在主函数内把程序开始的内容编写出来,再根据菜单程序函数调用图把需要用到的六个函数用用while和switch语句编译都编写在下面,最后按照作业要求去使用这六个函数,用while和switch语句编译可能出现的六种情况 遇到的问题: 1.开始忘记了定义opt这个函数,出现编译错误 2.在调用函数时把函数前的int也调用了进去 2.2.3 程序结果截图 内容需和上面示例保持一致 包括主界面截图,各个操作返回截图,结束截图 2.2.4 程序代码 需要使用六个函数,调用关系如上面思维导图 2.2.5 你对“设计”这个词的理解 简答题,任意字数,别太水了 答:设计是把一种设想通过合理的规划、周密的计划

C语言寒假大作战02

橙三吉。 提交于 2020-02-08 14:12:26
这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2019-3 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/10256 这个作业的目标在哪 编写一个控制台菜单程序 作业正文 使用函数、Switch语句来完成菜单程序 其它参考文献 https://baijiahao.baidu.com/s?id=1616367741584583839&wfr=spider&for=pcC语言编程:以实例教你如何在控制台程序中模拟一个选项菜单功能 1.设计思路和遇到的问题 1.1一眼看去比较脑壳疼,但是具体操作不是特别困难,虽然也会遇到种种问题. 思路大致如下: (1)根据题目菜单程序函数调用图确定要调用六个函数,其次根据参考资料得知使用“while”循环及“switch...case...”选择结构。主函数框架成型。 (2)其次根据题目内容了解到这六个函数都只需要直接输出,得知属于无参数无返回值类型的函数。 这俩句话参考了某个同学的思路,使得我豁然开朗,思路一下子就拓开了。 调用6个函数,然后就按照题目给的程序截图和菜单程序函数调用图用while和switch语句给出大致框架 先定义一个int型变量i,用来储存用户选项值,然后while(1)来把menu给列出来

C语言寒假大作战03

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-07 22:08:09
这个作业属于哪个课程 C语言程序设计 这个作业要求在哪里 C语言寒假大作战03 这个作业的目标 使用上次作业的菜单框架,并在其基础上增加各年级题目操作函数 参考文献 随机数rand 2.2.2 设计思路和遇到的问题 刚开始时对rand函数比较蒙,但后来查看了关于rand函数的相关概念和使用的方法及例子,才逐渐理解了 调用srand(time(NULL))设置随机数种子。 调用rand函数获取一个或一系列随机数。 2.2.3 程序结果截图 2.2.4 程序代码 2.2.5 Gitee上传截图与链接 Gitte链接 20199476 来源: https://www.cnblogs.com/1bing/p/12273511.html

C语言系统函数

穿精又带淫゛_ 提交于 2020-02-07 08:56:16
////以下是网上收藏记录的笔记,由于找不到原作者,所以没有原作者连接,侵权请私聊! 1:查找文件是否存在 函数原型: int access(const char *filename, int mode); 所属头文件:io.h filename:可以填写文件夹路径或者文件路径 mode:0 (F_OK) 只判断是否存在 2 (R_OK) 判断写入权限 4 (W_OK) 判断读取权限 6 (X_OK) 判断执行权限 用于判断文件夹是否存在的时候,mode取0,判断文件是否存在的时候,mode可以取0、2、4、6。 若存在或者具有权限,返回值为0;不存在或者无权限,返回值为-1。 2:打开文件 fopen() 函数即可打开文件,它的用法为: 头文件include<stdio.h> FILE *fp =fopen(char *filename, char *mode);. 打开文件出错时,fopen() 将返回一个空指针,也就是 NULL. “r” 以“只读”方式打开文件。只允许读取,不允许写入。文件必须存在,否则打开失败。 “w” 以“写入”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。 “a” 以“追加”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾

编写高效C语言的四大绝招 !!!

≯℡__Kan透↙ 提交于 2020-02-07 02:28:21
编写高效简洁的C语言代码,是许多软件工程师追求的目标。本文就是针对编程工作中的一些体会和经验做相关的阐述。   第一招:以空间换时间   计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。比如说字符串的赋值: 方法A:通常的办法 1#define LEN 32 2char string1 [LEN]; 3memset (string1,0,LEN); 4strcpy (string1,"This is a example!!"); 方法B:使用的时候可以直接用指针来操作。 1const char string2[LEN] ="This is a example!"; 2char * cp; 3cp = string2 ; 从上面的例子可以看出,A和B的效率是不能比的。在同样的存储空间下,B直接使用指针就可以操作了,而A需要调用两个字符函数才能完成。B的缺点在于灵活性没有A好。在需要频繁更改一个字符串内容的时候,A具有更好的灵活性;如果采用方法B,则需要预存许多字符串,虽然占用了大量的内存,但是获得了程序执行的高效率。   如果系统的实时性要求很高,内存还有一些,那我推荐你使用该招数。该招数的变招--使用宏函数而不是函数。举例如下: 方法C: 1#define bwMCDR2_ADDRESS 4 2

c语言 局部变量做返回值 问题

倖福魔咒の 提交于 2020-02-07 01:10:19
一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说, 函数不能通过返回指向栈内存的指针(注意这里指的是栈,返回指向堆内存的指针是可以的)。 下面以函数返回局部变量的指针举几个典型的例子来说明: 1: [cpp] view plain copy #include <stdio.h> char *returnStr() { char *p= "hello world!" ; return p; } int main() { char *str; str=returnStr(); printf( "%s\n" , str); return 0; } 这个没有任何问题,因为"hello world!"是一个字符串常量,存放在 只读数据段 ,把该字符串常量存放的 只读数据段 的首地址赋值给了指针,所以returnStr函数退出时,该该字符串常量所在内存不会被回收,故能够通过指针顺利无误的访问。 2: [html] view plain copy #include < stdio.h >

C语言 NOTE31

岁酱吖の 提交于 2020-02-06 04:26:47
系统编程之管道 系统编程之信号 信号响应特点 1.同时响应时,实时信号存在优先级,数值越大的先响应,非实时信号随机响应 如何验证:使用sigprocmask将所有信号阻塞后,发送所有信号给该进程,然后解除阻塞就可以观察信号响应顺序。 2.信号存在先后响应,先响应的响应,后来的信号可以嵌套响应, 注意 :非实时信号仅能嵌套一次,实时信号可以嵌套多次,因为实时信号内核会保存多次的差异。 使用kill -l:查看信号编号 自定义信号处理方式函数带传参数和不带参数形式: 不带参数形式: signal ( 设置信号处理方式 ) 头文件 #include <signal.h> 定义函数 void ( * signal ( int signum , void ( * handler ) ( int ) ) ) ( int ) ; 函数说明 signal()会依参数 signum 指定的信号编号来设置该信号的处理函数. 当指定的信号到达时就会跳转到参数 handler 指定的函数执行. 如果参数 handler 不是函数指针, 则必须是下列两个常数之一: SIG_IGN 忽略参数 signum 指定的信号. SIG_DFL 将参数 signum 指定的信号重设为核心预设的信号处理方式. 关于信号的编号和说明, 请参考附录 D 返回值 返 回先前的信号处理函数指针, 如果有错误则返回 SIG_ERR

手动编写C语言字符串函数

十年热恋 提交于 2020-02-06 01:01:13
C语言字符串库string.h包含很多常用的字符串函数: 字符串长度函数strlen 字符串比较函数strcmp 字符串拷贝函数strcpy 字符串追加函数strcat 左起寻找字符函数strchr 右起寻找字符函数strrchr 寻找字符串函数strstr 忽略大小写寻找字符串函数strcasestr 字符串长度函数strlen 一个字符串以‘\0’结尾才算结束,详见: C语言如何用指针指向字符串:https://mp.csdn.net/postedit/104068698 ‘\0’是字符串的一部分,但是不算字符串的长度,用strlen计算长度时,不会将‘\0’算在内;用sizeof()计算长度时,将‘\0’算在内。 首先上一段库函数版代码 # include <stdio.h> # include <string.h> int main ( int argc , char const * argv [ ] ) { char ch [ ] = "hello" ; printf ( "strlen=%d\n" , strlen ( ch ) ) ; return 0 ; } 下面是手动编写版,写了两个版本,当然,你也可以自己写。 # include <stdio.h> # include <string.h> /* int mylen(char const *dh) { int

C语言寒假大作战02

巧了我就是萌 提交于 2020-02-05 19:01:25
问题 回答 这个作业属于那个课程 班级链接 这个作业要求在哪里 作业要求 这个作业的目标 要求大家完成菜单的逻辑结构。 作业正文 使用函数、Switch语句来完成菜单程序并通过git上传文件至远程仓库 其他参考文献 百度,《C语言程序设计》 2.2.2 设计思路和遇到的问题 思路 先在主函数内把程序开始的内容编写出来,然后就先不管主函数了,再根据菜单程序函数调用图把需要用到的六个函数一一编写在下面,最后按照作业要求去使用这六个函数,用while和switch语句编译可能出现的六种情况 遇到的问题 1.开始忘记了这次作业还需要输入,没有使用scanf 2.在调用函数时把函数前的int也调用了进去 3.出现了上面这个错误,我翻译出来也不知道是什么原因,然后百度一下才发现原来仅仅是因为上一个运行窗口还没关掉...... 2.2.3 程序结果截图 2.2.4 程序代码 2.2.5 你对“设计”这个词的理解 设计也就是要有目的的去进行创造和创作,设计是一个作品的基础,设计出好的作品需要自身有一定的实力,我们所用的书本就叫做《C语言程序设计》,设计出的程序更完美,程序所能解决问题的能力也就更高。 2.2.6 Gitee上传截图与链接 链接 来源: https://www.cnblogs.com/wangwenzhi/p/12264862.html