首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

两段有趣C代码

来源:公众号【编程珠玑】 作者:守望先生 ID:shouwangxiansheng 又到了周末了,好久没更新了,发现这周更新《性能优化-一个命令发现性能问题》貌似看得人不多,今天发点轻松”水货“。...来看一个#include指令无聊用法。...小结 看起来没啥用内容。 不过在你需要文本内容比较长,不想直接复制在源代码里面的时候,其实就可以考虑这种方式了。...原理 其实原理也很简单,就是预编译时候,将#include文件内容嵌入到所在位置罢了,等同于: #include int main(void) { printf (...; return 0; } 更详细解释可以参考《hello程序是如何被编译出来?》。 扩展 当然了,如果你在文本中嵌入一段代码也是可以,等同于文本代码放在#include指令位置。

1K20

12个有趣C语言面试题

摘要:12个C语言面试题,涉及指针、进程、运算、结构体、函数、内存,看看你能做出几个!...(只读代码)“Linux”第一个字母。...%d \n", a+b+c, (b = b*2), (c = c*2)); return 0; } 答:输出结果是: 110..40..60 这是因为C语言里函数参数默认是从右往左处理...英文原文:12 Interesting C Interview Questions and Answers 本文引文:12个有趣C语言面试题(CSDN) 参考推荐: 12个有趣C语言问答(IT-Homer...) 12个有趣C语言问答(osChina) 学习算法之路 各种基本算法实现小结(一)—— 链 表 各种基本算法实现小结(二)—— 堆 栈 各种基本算法实现小结(三)—— 树与二叉树 各种基本算法实现小结

81520
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言指针初识——原来指针这么有趣

    1.1 指针定义 我认为实战是最好理解方式,所以会有代码以及注释详细理解,不过在你看代码之前,你应该知道这些东西: ❝ 如何定义一个指针 如何给指针赋值 给指针赋值后,怎么使用原变量值 ❞ 就和定义一个普通变量一样...:类型 *变量名 指针变量接收是变量内存地址在C语言中,通过符号&来取出变量内存地址 赋值也是同样 ---- 1.2 指针实例理解 那么你知道了这些知识后,就看代码: #include<stdio.h...运行结果是: num值为:10 &num值为:0xff8effe0 *pnum值为:10 pnum值为:0xff8effe0 1.3 头脑风暴 看了这段代码,是不是对指针有了更深刻了解了呢?...❝昨天是使用手机敲得C代码,因为那时候还在火车上,没法拿电脑 今天使用了电脑,编译器是gcc,编辑器是vs code 重新编译了一下 ❞ 运行结果如下: p=0061FECC &p=0061FECC *...p=0061FECC 欸,这就很舒服了,内存地址是一样,所以虽然安卓有C语言编译器,但还是使用电脑吧。

    35400

    C有趣

    C诡异离奇,缺陷重重,却获得了巨大成功 -- Dennis Ritchie #define a(y) a_expanded(y) a(x); 被扩展为...valve 与 open进行不相等比较 */ foo(const char **p){ } main(int argc, char **argv) { foo(arvg); } 编译这段代码...,编译器会发出一条告警信息: line 5: warning: argument is incompatible with prototype ANSI C 标准: 每个实参都应该具有自己类型,这样它值就可以赋值给它所对应形参类型对象...(该对象类型不能含有限定符)。 说明:参数传递过程类似于赋值。所以除非一个类型为char ** 值可以赋值给一个const char **类型对象。否则肯定会产生一条诊断信息。...要使赋值形式合法,需要满足如下条件: 两个操作数都是指向有限定符或无限定符相容类型指针,左边指针所指向类型必须具有右边指针指向类型全部限定符。

    33710

    C 语言知识

    C 语言知识 堆与栈(Heap and Stack) 堆相对比较容易理解, 就是计算机剩余内存, 可以通过 malloc 函数访问获取堆内存。...如果没有这么做的话, 将会导致你程序出现内存泄漏。 栈是一个特殊内存区域, 存储函数创建本地变量。 它工作原理是每个函数参数被压入堆栈,并在函数内使用。...这是真正栈道数据结构, 后进先出。 对于本地变量也是相同。 栈好处是简单, 当函数退出时, C 编译器将这些变量推出栈道进行清理。 这样可以简单避免栈道上变量有内存泄漏。...Socket 数据流转换为复杂结构或者分析文件 指针语法 type * ptr // 定义一个名称为 ptr type 类型指针; *prt // 指针 ptr 指向内容值; *(ptr...地址 ptr++ //将 ptr 指向地址加一位

    97620

    C 语言代码

    以下是一个较为复杂 C 语言代码示例,展示了如何使用指针和动态内存分配来实现一个简单字符串操作库: #include #include #include...destroyString(str2); destroyString(concatenated); destroyString(copied); return 0; } 上述代码中...我们实现了以下几个字符串操作函数: createString:用于创建一个新字符串对象,并将字符串内容复制到动态分配内存中。...最后,我们释放了所分配内存,避免内存泄漏。 请注意,这只是一个相对复杂示例代码,演示了如何使用指针和动态内存分配来操作字符串。...在实际编写代码时,应根据具体需求选择合适字符串处理库或者使用已有的标准库函数来处理字符串。

    16840

    c语言爱心代码详解_C语言程序源代码

    1、love图案C语言爱心代码 C语言爱心代码如下: #include int main() { int i, j, k, n = 0, x = 0, y = 50; //爱心头部没有规律...信 公 众 号:“CC加加” 回复:“源码” 即可获取 效果展示: 2、心形图案C语言爱心代码 代码如下: #include int main() { int i,...中间空格,每下一行空格比上一行少4个 for (m=1; m<=4*i+1; m++) printf("%c", c);//输出右半部分字符爱心 printf("\n"); //每一行输出完毕换行...k++) printf("%c", c);//每下一行字符爱心比上一行少4个(这个循环是i--) printf("\n"); //每一行输出完毕换行 } for (i=1; i<=39; i++.../最后空出5行 return 0; } 效果展示: 3、复杂动态C语言爱心代码 代码如下: #include #include #include <windows.h

    9.6K21

    初识C语言C语言知识点)

    C语言三大结构:顺序结构,选择结构,循环结构 一.数据类型 1.字符 char   (字符数据类型) 2.整型 short    (短整型) int        (整型) long    (长整型)...long long (更长整型) 3.浮点数(小数) float   (单精度浮点数) double   (双精度浮点数) 注:C语言标准 sizeof(long long)>=sizeof(long...如: \x30 0 字符:计算机能够处理是二进制,数据在存储时候存储也是二进制 六.操作符 1.算数操作符 +  -   *   /   % 2.移位操作符 > 3.位操作符 &   ...return   short  signed sizeof   static struct  switch  typedef union  unsigned   void  volatile  while 注:C语言提供了丰富关键字...,这些关键字都是语言本身预先设定好,用户自己是不能创造关键字

    9910

    趣味C语言C语言游戏飞机大战)

    第三,如果你不能正确对待自己,那么你也是自己地狱。 飞机大战 下面放出经典小游戏飞机大战,当然,现在也还只是个模版,简称1.0版本,哈哈哈。...待开发功能还有很多,比如敌机随机动态出现和发射子弹,以后有时间,编还会继续改进啦~ 为了能让小白更好理解,已将代码分成模块来讲啦。...=0;i<D;i++){ printf(" "); } printf("+\n"); } //如上是控制飞机所要打击目标方位...++; } if(input==' '){ Fired=1; } } return 0; } 可能大家会有所发现编在写代码注释时有时是会让大家自行去百度...To:有的C语言IDE可直接在运行窗口看见,若在执行窗口有问题,则可直接调出项目文件中exe文件,双击运行即可。 ?

    4.3K30

    C语言代码优化一些经验及技巧(二)

    例如: void StringCopy(char*strDestination,constchar*strSource); 4、不要省略返回值类型 C语言中,凡不加类型说明函数,一律自动按整型处理。...5、函数名字与返回值类型在语义上不可冲突 违反这条规则典型代表是C标准库函数getchar。...例如: charc; c=getchar(); if(c==EOF) … 按照getchar名字意思,将变量c声明为char类型是很自然事情。...但不幸是getchar的确不是char类型,而是int类型,其原型如下: int getchar(void); 由于c是char类型,取值范围是[-128,127],如果宏EOF值在char取值范围之外...回顾上例,C标准库函数设计者为什么要将getchar声明为令人迷糊int类型呢? 在正常情况下,getchar的确返回单个字符。

    49821

    C语言代码优化一些经验及技巧(三)

    循环展开 简单循环可以展开以获取更好性能,但需要付出代码体积增加代价。循环展开后,循环计数应该越来越小从而执行更少代码分支。...,原因是代码不用每次循环需要检查和增加i值。...概率大较大则把if (2 == condition)放在前面,如: if (2 == condition) { } else if (1 == condition) { } else { } 这里有个细节...\n"); } 这段代码无论我们是否查找得到,循环都会全部执行完。更好方法是一旦找到我们查找数字就终止继续查询。...存在两种增加一个变量值方法有何意义呢?K&R C设计者认为复合赋值符可以让程序员把代码写得更清楚些。另外,编译器可以产生更为紧凑代码

    2.2K21

    C语言代码优化一些经验及技巧(一)

    有些处理器处理无符号unsigned 整形数效率远远高于有符号signed整形数(这是一种很好做法,也有利于代码具体类型自解释)。...如果 N非常大, 最好采用示例 4-4(d)写法, 可以提高效率。如果 N非常,两者效率差别并不明显,采用示例 4-4(c)写法比较好, 因为程序更加简洁。 ?...循环中第三条语句是可选(无限循环可以写为for(;;))。如下代码拥有同样效果: for(i=10; i; i--){} 或者更进一步: for(i=10; i!...例如: void StringCopy(char*strDestination,const char*strSource); 4、不要省略返回值类型 C语言中,凡不加类型说明函数,一律自动按整型处理...例如: char c; c=getchar(); if(c==EOF) … 按照getchar名字意思,将变量c声明为char类型是很自然事情。

    1K32

    人心易变,这段有趣C代码也一样!!!

    C语言volatile关键字也许大部分人都听过,但实际用过的人可能不多,它字面意思是“易变”。...今天我们题目就跟它有关,这也是一道比较著名和经典面试题,不同公司对它进行过多次考察,代码如下: int square(volatile int *p){ return(*p)*(*p); }...函数意思大家都明白,就是计算整数平方,就问上面的代码有没有问题?...我们都知道为了提高效率编译器会对程序进行一定优化,但有时“自作聪明”编译器也会帮倒忙,刚开始我们提到volatile关键字字面意思是“易变,不固定”,用它来修饰变量,目的就是告诉编译器你不要管我...回到本题,如果说编译器在编译上述代码时,把它等价为如下: int square(volatile int *p){ int a=*p; int b=*p; return a*b; } 由于volatile

    51310

    C语言代码优化一些经验及技巧(四)

    无限循环优先选用for(;;),而不是while(1) 在C语言中,最常用无限循环语句主要有两种:while(1)和for(;;)。从功能上讲, 这两种语句效果完全一样。...没有参数函数必须用void填充 在C语言中,void作用主要有两个: 1、对函数返回值限定。 2、对函数参数限定。...(x) : (y)) 在C程序中,我们可以适当地用宏代码来提高执行效率。宏代码本身不是函数,但使用起来与函数相似。...预处理器用复制宏代码方式代替函数调用,省去了参数压栈、生成汇编语言CALL调用、返回参数、执行return等过程,从而提高了运行速度。...但是,使用宏代码最大缺点就是容易出错,预处理器在复制宏代码时常常产生意想不到边际效应。因此, 尽管看起来宏要比函数简单得多,但还是建议使用函数形式来封装这些简单功能代码

    63921
    领券