![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
Evan_ZGYF丶
我在起点
展开
-
【C语言】写一个“标准“宏,已知数组table,求出table的元素个数
直接上答案:#define NTBL (sizeof(table)/sizeof(table[0]))解析:先算出总数组大小,再算出单个成员大小,除下来就是成员数量。(因为数组成员大小相同)收录于:C语言|BSP开发|嵌入式软件|Linux驱动|笔试面试题汇总帖...原创 2021-01-10 22:05:30 · 1790 阅读 · 1 评论 -
【C语言】写一个“标准”宏,实现交换两个参数值
直接上答案:#define SWAP(x,y) { \(x) = (x) + (y); \(y) = (x) - (y); \(x) = (x) - (y); \}解析:上面是一种不需要额外参数,实现x,y的值替换的方法。带入实例:x=1,y=2;x = x + y = 1 + 2 = 3; //这里x+y的和。y = x - y = 3 - 2 = 1; //(x在上一步已经变成3了)这里y就等于先前的x的值。x = x - y = 3 - 1 = 2;...原创 2021-01-10 22:04:43 · 1997 阅读 · 3 评论 -
【C语言】引用和指针的区别?
首先解释在C语言中,什么是引用:1、引用概念 引用是别名,必须在声明的时候初始化。即:是指一个已定义变量的别名。(一个内存空间,有两个名字都可以操作) 引用:在函数调用时,是变量的别名,不可以单独存在,使用时必须要初始化; 指针:本身有自己的地址,可以单独存在。引用和指针的区别:指针和引用都是地址的概念,指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。 程序为指针变量分配内存区域,而不为引用分配内存区域。 指针使用时要在前加 * ,引..转载 2021-01-10 17:35:23 · 3549 阅读 · 3 评论 -
【C语言编程】实现一个函数,判断字符串str2是否在字符串str1里
直接上源码,其实是仿照<string.h>库中的源码:char* strstr(register char* str1, register char* str2){ register char* bp; register char* sp; if (!*str2) return str1; while(*str1) { bp = str1; sp = str2; do { if (!*sp) return str1; }while(*b原创 2021-01-10 17:05:04 · 3944 阅读 · 8 评论 -
【C语言】使用一个宏实现输入两个参数并返回较小的一个
答案很短:#define MIN(x,y) ((x)>(y)?(x):(y))解析:其实也可以问类似的,比较两个参数并返回较大的一个。这边第一个可以考察三目运算符的含义:“? :”第二个考察细心程度把,需要考虑到负数等场景,因此需要用括号保护下。收录于:C语言|BSP开发|嵌入式软件|Linux驱动|笔试面试题汇总帖...原创 2021-01-10 15:47:46 · 3852 阅读 · 3 评论 -
【C语言】i++和++i的区别是什么?哪个效率高?为什么?
写这篇文章主要的目的就是想把看到的一些好的C语言习题摘录下来。执行效率理论上,i++的执行效率比++i的执行效率要高。++i不用生成临时变量,而i++要生成临时变量。这个会因编译器有所区别,有的编译器会对这个流程进行优化。例如直接汇编相应的代码,结果如下:可以看到它们的执行效率是差不多的。执行逻辑i++表示先赋值后加1;i++实现的是,运算结束之后进行自加运算,换句话说这一句跑到分号之后才会有自加效果。++i表示先加1再赋值;++i正好相反,是在这一句的一开始就进行.原创 2021-01-03 22:55:59 · 3824 阅读 · 6 评论 -
【C语言】c语言练习题【2】(适合初学者)
《c语言练习题——基础2》1.从一个字符数组中读出相应的整数、实数2.将整数转换为相应的一个字符数组。分析:从个位提取数字,组合字符符号位的处理 12345=>"12345"3.字符串数组的冒泡排序,从小到大4.查找介于n1与n2(0(1)该数的十进制表示中有且仅有两个相同的数字位;(2)该数是素数5.编写函数void change(char原创 2016-08-31 19:56:10 · 1830 阅读 · 2 评论 -
【C语言】c语言练习题【3】(适合初学者)
《c语言练习题——基础3》1.对N行N列二维数组的每一行排序,偶数行(0当作偶数)由小到大排序,奇数行由大到小排序2.找出符合以下条件的Troitsky数,将该数的首位数字移动到末位数字之后得到的数是原数的整数倍例如:将142857的首位数字1移动到末位之后得到的数是428571,而428571=3*142857,因此142857是Troitsky数编原创 2016-08-31 19:56:54 · 1451 阅读 · 1 评论 -
【C语言】c语言练习题【4】(适合初学者)
《c语言练习题——基础4》1.编写函数void count(char a[],char w[][10],int n,int b[])。功能是:统计w指向的数组中的n个单词在a指向的字符串中各自出现的次数(将非字母字符看作单词分割符),拧将统计结果依次保存在b指向的数组中。2.编写函数int stat(int a[],int n,int c[][2])。a指向的数组中保存了由n个1位整原创 2016-08-31 19:57:41 · 1216 阅读 · 1 评论 -
【C语言】c语言练习题【整数算法训练】(适合初学者)
《c语言练习题——整数算法训练》1.题目:通过编程实现,统计1~n有多少个9 提示:n通过参数传入2.题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.提示:用数组完成3.题目:输入5个数(含负数、小数)将它们按由小到大的顺序排列起来提示:需要排数的数字通过参数传递进来,例如:输入:./a原创 2016-08-31 19:58:24 · 1140 阅读 · 1 评论 -
【C语言】c语言练习题【递归和栈编程训练】(适合初学者)
《c语言练习题——递归和栈编程训练》1.题目: 利用递归方法实现一个函数,该函数能够实现n的阶乘,即 n! = n*(n-1)*…*3*2*1;2.题目:利用字符数组实现一个先入后出的栈结构,并提供栈操作的push和pop的接口3.题目:输入一个表达式字符串,如1+3*4-6,输出这个表达式的值.提示:需要建立两个栈结构,一个为整形存放操作数,另一个为字符型,存放运算符,运算原创 2016-08-31 19:59:09 · 2786 阅读 · 1 评论 -
【C语言】c语言练习题【字符串训练】(适合初学者)
《c语言练习题——字符串训练》1.题目: 请编写一个C函数,该函数将一个字符串逆序2.题目: 请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出3.题目: 输入一个字符串,计算字符串中子串出现的次数4.题目: 编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,及将句子中的单词位置倒置,而不改变单词内部结原创 2016-08-31 20:00:55 · 4386 阅读 · 2 评论 -
【C语言】c语言练习题【指针和链表训练】(适合初学者)
《c语言练习题——指针和链表训练》1.题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.提示:用环形链表实现2.题目:创建两个学生链表,含有姓名、年龄的信息,一个链表存放男生,一个链表存放女生3.题目:将上面两个链表合并,按学生的年龄进行排序,合成新的链表4.题目:将上题中建立的链表进行反转,实现原创 2016-08-31 20:01:37 · 4501 阅读 · 2 评论 -
【C语言】C语言练习题【1】(适合初学者)
1.求a和b的最大公约数2.求100~200间的所有素数,每行打印5个素数3.将整数转换为10进制、2进制、16进制的数字串4.整数数组的冒泡排序(从小到大)5.计算字符串中的单词数。原创 2016-08-31 19:04:19 · 6625 阅读 · 4 评论 -
C:结构体复制与赋值、浅拷贝与深拷贝相关问题
先思考:结构体能否用“=”号直接赋值?如何理解结构体的浅拷贝与深拷贝?结构体“=”号赋值与“malloc”赋值哪个更好?效率更高?直接上代码!1.结构体能否用“=”号直接赋值?编写C代码:vi struck_assign.c内容如下:#include <stdio.h>struct Foo { char a; int b; double c;}foo1, foo2; //define two structs with thre原创 2020-12-09 00:23:21 · 7577 阅读 · 4 评论 -
C:提高C代码运行效率的方法有哪些?列举几个提高代码执行效率的方法
如何提高代码运行效率?提高C语言代码运行效率的方法如何优化C语言代码实用的C语言编程技巧哪些方法可以提高代码的执行效率?提高C代码运行效率的方法有哪些?列举几个提高代码运行效率的方法原创 2020-12-07 21:53:49 · 3845 阅读 · 1 评论 -
C:有关指针的经典笔试面试题
指针与数据类型问题:a) 一个整型数(An integer) b)一个指向整型数的指针( A pointer to an integer) c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)r d)一个有10个整型数的数组( An array of 10 integers) e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers) f) 一个原创 2020-12-02 23:24:48 · 2672 阅读 · 4 评论 -
C:什么是指针函数?什么是函数指针?他们之间有什么区别?
【快速记忆法:末尾是什么,他就是什么类型】指针函数:一个函数,它的返回值是指针。函数指针:一个指针,它指向一个函数。【函数指针】定义形式:类型 (*指针变量名)(参数列表); 例如:int (p)(int i,int j); 说明:p是一个指针,它指向一个函数,该函数有2个整形参数,返回类型为int。p首先和结合,表明p是一个指针。然后再与()结合,表明它指向的是一个函数。指向函数的指针也称为函数指针。【指针函数】定义形式:类型 *指针变量名 (参数列表): 例如:int p.原创 2020-12-02 21:31:12 · 2351 阅读 · 2 评论 -
C:请实现一个strlen、strcmp、memcmp、strcpy、memcpy等函数
size_t my_strlen(const char *s){ const char *sr=s; while(*sr != '\0') sr++; return sr-s;}int my_strcmp(const char *cs, const char *ct){ int res=0; do { res = *cs++ - *ct++; if (res) break; } while (*cs); return res原创 2020-11-30 23:23:39 · 1367 阅读 · 3 评论 -
C:static、const、register、extern、volatile、inline、sizeof、typeof等关键字的作用?
Static:(该变量保存在全局静态区) a.修饰局部变量——>会提升局部变量的生存周期b.修饰全局变量——>作用域被限制——>被限制到当前的原文件中 c.修饰函数——>作用域被限制——>被限制到当前的原文件中Const:(该变量保存在常量区)1.声明常变量,,使得指定的变量不能被修改。2.修饰函数形参,使得形参在函数内不能被修改,表示输入参数。3.修饰函数返回值,使得函数的返回值不能被修改。register:(该变量保存在寄存器中)用来声明为寄存器变量.原创 2020-11-30 20:55:36 · 2251 阅读 · 2 评论 -
C:有关sizeof的经典笔试面试题
参考:https://www.cnblogs.com/xuyuantao/archive/2010/08/15/1800266.html因为已经有人总结过了,直接搬运+分享。顺便自己也总结下顺便改下方式,先出题目,再继续解释。思考://4.基本数据类型int i;sizeof( i ); // ?sizeof( int ); // ?sizeof i; // ?sizeof int; // ?sizeof(2); // ?sizeof.转载 2020-11-29 22:24:10 · 1482 阅读 · 2 评论 -
【C语言】谈谈内存分配中的堆和栈的区别?为什么要有堆区和栈区呢?
(1)管理方式不同:栈直接由编译器管理(产生和消除),堆由程序员管理,程序员管理其的产生和消除(2)空间大小不同:栈占用的空间较小,而堆占用的空间较大(3)能否产生碎片不同:栈不会产生碎片,但是堆会产生,会有内存泄露的问题(4)生长方向不同:栈是向下压栈,堆是向上存放数据(5)分配方式不同:栈是在程序员申请之后,由系统分配的没有经过初始化的变量,只有动态分配方式。而堆是由程序员自己实例化,创建的已经过初始化的变量,分配方式类似于链表,动态分配和静态分配都可以(6)分配效率不同:栈是由.原创 2020-11-26 23:05:26 · 3417 阅读 · 3 评论 -
C:谈谈内存分配中的(.data)段和(.bss)段的区别?为什么要分.data段和.bss段?
区别:.data段:存放已初始化的全局变量。在编译器编译的时候,会给已初始化的数据分配内存空间,数据保存在目标文件中。.bss段:(bss是英文Block Started bySymbol的简称。)存放未初始化的全局变量。在编译器编译的时候,不会给该段的数据分配空间,只是记录数据所需的空间大小。程序执行的时候再分配内存并将内存清零。为什么要分.data段和.bss段?在程序编译的时候,不会给.bss段中的数据分配空间,只是记录数据所需空间的大小。在程序执行的时候,才会给.bss段中的原创 2020-11-26 22:58:49 · 4232 阅读 · 1 评论 -
C:请描述一个可执行程序占用的内存分为哪几个区?每个分区各自的作用?
C:请描述一个可执行程序占用的内存分为哪几个区?每个分区各自的作用?原创 2020-11-26 22:40:31 · 3649 阅读 · 3 评论