C语言基础知识
或许对了
我曾七次鄙视自己的灵魂
展开
-
C语言必知必会的标准库函数
switch-case/*当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必..原创 2020-09-14 16:08:31 · 225 阅读 · 0 评论 -
深入理解C语言中宏定义#, ##
从本质上看,C语言中的宏定义实现的是一个文本替换的功能,似乎很简单的样子,然而这几天去看了下Linux Kernel源码中的各种宏定义,才发现一个宏定义竟然也可以有如此多的奇技淫巧……于是花了一天时间仔细研究了下宏的相关知识,此处整理总结下。关于宏,网上有一组写得极好的文章,基本上看完这几篇文章就可以对宏有一个深入的理解了:宏定义黑魔法-从入门到奇技淫巧 (1) —— 基本概念宏定义黑魔法-从入门到奇技淫巧 (2) —— object-like宏的展开宏定义黑魔法-从入门到奇技淫巧 (3) —— f转载 2020-06-20 21:21:40 · 393 阅读 · 0 评论 -
scanf使用全面详解
函数名: scanf功 能: 执行格式化输入用 法: int scanf(char *format[,argument,…]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。其调用格式为: scanf("<格式化字符串>",<地址表>);scanf()函数返回成功赋值的数据项数,出错时则返回EOF。其控制串由三类字符构成:1。格式化说明符;2。空白符;3。非空白转载 2020-06-20 20:55:58 · 5895 阅读 · 0 评论 -
C语言const修饰常指针常量解析
const在实际编程中用得并不多,const是constant的缩写,意思是“恒定不变的”!它是定义只读变量的关键字,或者说const是定义常变量的关键字。在C语言中有五种用const定义指针变量的形式。1.const int *p这种定义方式表示定义一个指向const int类型的指针变量,下面我在VS上敲如下一段代码先定义一个整形变量num和一个常变量data,再定义一个指向const int类型的指针变量p,并将data的地址赋给它,下面我们再将num的地址赋给p,编译器并没有报错,但如果对p转载 2020-06-20 16:23:53 · 411 阅读 · 0 评论 -
字符数组的初始化与赋值
代码编译运行环境:VS2017+Win32+Debug原文链接1.字符数组的初始化方式C语言中表示字符串有两种方式,数组和指针,字符数组是我们经常使用的方式。变量的定义包括指明变量所属类型、变量名称、分配空间以及初始化。可以看出,变量的初始化是变量定义的一部分。除了const变量需要显示初始化以外,其它变量如果在定义时未显示初始化,编译器会为变量以默认值进行初始化。变量的赋值和初始化有着本质的区别,字符数组也是如此,具体见我的另一篇博客:认识初始化。1.1逐个字符初始化当定义一个字符数组时,可.转载 2020-06-20 15:24:47 · 587 阅读 · 0 评论 -
typedef int *a[N]语法总结
typedef int a[10] 与typedef int* a[10];与typedef int (*a)[10] 与 typedef int * (*a)[10]1) #define a int[10] (全错,直接文本替换)A) a[10] a[10]; B) a[10] a;C) int a[10];D) int a;E) a b[10];F) a b;G) a* b[10];H) a* b;2) typedef int a转载 2020-06-20 14:58:49 · 937 阅读 · 0 评论 -
C语言嵌套宏及# ##用法
关于嵌套宏的使用问题:下面通过宏定义实现一个可以指定前缀的字符串。PREFIX+".%d"方法1:使用#运算符。出现在宏定义中的#运算符把跟在其后的参数转换成一个字符串。有时把这种用法的#称为字符串化运算符。#include<cstdio>#define PREX 1.3.6#define FORMAT(n) #n".%d\n"int main(){ int ival = 246; printf(FORMAT(PREX), ival);// PREX.246 retur转载 2020-06-20 11:12:44 · 1831 阅读 · 0 评论 -
【转自猫大】宏定义的黑魔法 - 宏菜鸟起飞手册
宏定义在C系开发中可以说占有举足轻重的作用。底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行。而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对宏的使用和依赖并不多。但是使用宏定义的好处是不言自明的,在节省工作量的同时,代码可读性大大增加。如果想成为一个能写出漂亮优雅代码的开发者,宏定义绝对是必不可少的技能(虽然宏本身可能...转载 2020-03-25 20:36:56 · 402 阅读 · 0 评论 -
c语言 宏和其他预处理
总结 https://www.w3cschool.cn/c/c-preprocessors.html 枚举和宏其实非常类似:宏在预处理阶段将名字替换成对应的值,枚举在编译阶段将名字替换成对应的值。我们可以将枚举理解为编译阶段的宏。 可以gcc 的 -E 来展开宏定义 反斜杠 但是在宏定义时,如果多条语句,则必须加反斜杠,如 #defi...转载 2020-03-25 11:52:44 · 175 阅读 · 0 评论 -
c语言static关键字的理解
static一、概述在c语言中static恰当的使用能让程序更加完美,细节上的严谨,代码会更好,也更利于程序的维护与扩展。而static使用灵活,且又有两种完全无关的用法,所以整理总结一下。二、static的两种用法:1、static修饰局部变量,成为一个局部静态变量。2、static修饰全局变量与函数,成为静态全局变量与静态函数。三、相关涉及概念 可能会疑...转载 2020-03-24 16:16:07 · 181 阅读 · 0 评论 -
【转】基本概念--c语言的存储类&作用域&生命周期&链接属性
感谢原作者分享,转自:https://blog.csdn.net/qq_28992301/article/details/533113711.概念解析存储类:描述这个变量在何种地方存储作用域:描述这个变量起作用的代码范围生命周期:描述这个变量什么时候诞生及什么时候死亡链接属性:描述这个变量(函数)能如何被链接这四个概念从不同角度分析了c语言的不同规则2.存储类代码段:又叫...转载 2020-03-11 11:35:13 · 144 阅读 · 0 评论 -
【转】c语言的宏、预处理、typedef
转自:https://blog.csdn.net/qq_28992301/article/details/53308754 感谢原作者分享展开1.预处理的概念由源码到可执行文件的过程:源码.c->(预处理)->预处理过的.c->(编译)->汇编文件.S->(汇编)->目标文件.o->(链接)->elf可执行程序gcc -E xx....转载 2020-03-11 11:31:27 · 171 阅读 · 0 评论 -
结构体字节对齐
结构体字节对齐 在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列, 而不是简单地顺序排列,这就是内存对齐。计算结构变量的大小必须讨论...转载 2020-01-14 16:26:22 · 111 阅读 · 0 评论 -
【转载】char str[]与char *str的区别
感谢原作者分享,原文链接https://blog.csdn.net/szchtx/article/details/10396149 在C语言中,对字符串的操作主要有两种方式,一是使用字符数组,char str[];二是使用字符指针。那么二者有什么区别呢?下面将分述二者的使用,最后进行比较。一、字符数组使用char str[]定义一个字符数组str,中括号...转载 2019-10-14 15:39:00 · 293 阅读 · 0 评论 -
【转载】C语言中字符数组的初始化与赋值
1.字符数组初始化在C语言中,字符串是当做字符数组来处理的;所以字符串有两种声明方式,一种是字符数组,一种是字符指针。字符数组初始化char parr[] = “zifuchuanshuzu”;char charr[] = { ‘z’,‘i’,‘f’,‘u’,‘c’,‘h’,‘u’,‘a’,‘n’,‘s’,‘h’,‘u’,‘z’,‘u’ };12这是字符数组初始化的两种方式,但是这两...转载 2019-08-27 14:39:29 · 277 阅读 · 0 评论 -
scanf函数总结及LeetCode中while(scanf())用法
scanf 函数是有返回值的,它的返回值可以分成三种情况正整数,表示正确输入参数的个数。例如执行 scanf("%d %d", &i, &j);如果用户输入"1 2",可以正确输入,返回2(正确输入了两个变量);如果用户输入"1,1",可以正确输入i,无法输入j,返回1(正确输入了一个变量)。0,表示用户的输入不匹配,无法正确输入任何值。如上例,用户如果输入",3 4"...原创 2019-09-02 14:32:56 · 7029 阅读 · 0 评论 -
【转自唐大麦】让你不再害怕指针——C指针详解(经典,非常详细)
好资料自转存,感谢原作者知识总结分享,建议查看原贴,样式好看https://blog.csdn.net/soonfly/article/details/51131141前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级...转载 2019-09-05 16:54:43 · 150 阅读 · 0 评论 -
C语言指针数组和数组指针
优先级:()>[]>*一、指针数组和数组指针的内存布局初学者总是分不出指针数组与数组指针的区别。其实很好理解:指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。下面到底...转载 2019-09-05 17:00:21 · 129 阅读 · 0 评论 -
【转载】Linux虚拟地址空间布局
建议查看原贴,感谢原作者分享https://www.cnblogs.com/clover-toeic/p/3754433.html 在多任务操作系统中,每个进程都运行在属于自己的内存沙盘中。这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4GB的内存地址块。在Linux系统中, 内核进程和用户进程所占的虚拟内存比例是1:3,而Window...转载 2019-09-09 19:02:05 · 133 阅读 · 0 评论 -
【转载】指针数组 数组指针 指针函数 函数指针
int *p[4]; //指针数组。 是个有4个元素的数组, 每个元素的是指向整型的指针。(数组的每个元素都是指针)int (*p)[4]; //数组指针。 它是一个指针,指向有4个整型元素的数组。(一个指针指向有4个整型元素的数组)int *func(void); //指针函数。 无参函数, 返回整型指针。 ...转载 2019-09-10 10:08:11 · 97 阅读 · 0 评论 -
【转载】由scanf说起:scanf函数和回车、空格 及其返回值 不同类型变量的变量名和内存的关系
scanf和回车的关系: 先看一个我们经常使用的代码: char c; scanf("%c", &c); scanf 的各种格式中,%d、%c、%s三种最常用,通常都是以回车作为一次输入的结束。由于对字符解析方式及字符特点不同(如数字中一般不会出现空格回车等特殊字符)不同,%d格式一般不会在连续输入时,遇到问题。而%s和%c却会出现各种各样的问题,比如回车问题,空格...转载 2019-09-10 10:32:52 · 377 阅读 · 0 评论 -
【转载】C语言内存使用的常见问题及解决之道
一 前言 本文所讨论的“内存”主要指(静态)数据区、堆区和栈区空间(详细的布局和描述参考《Linux虚拟地址空间布局》一文)。数据区内存在程序编译时分配,该内存的生存期为程序的整个运行期间,如全局变量和static关键字所声明的静态变量。函数执行时在栈上开辟局部自动变量的储存空间,执行结束时自动释放栈区内存。堆区内存亦称动态内存,由程序在运行时调用malloc/calloc/reall...转载 2019-09-10 11:09:47 · 281 阅读 · 0 评论 -
【转载】C/C++输入函数丨C/C++常用输入函数总结,哪里不会点哪里!
请查看原贴,感谢作者分享https://zhuanlan.zhihu.com/p/77217412一、scanf()scanf() #include <cstdio>//c语言中的<stdio.h>就是c++语言中的<cstdio>我们从键盘上读取的信息都是字符类型(char),而将它们转换成int类型或者double类型,就是scanf()函...转载 2019-09-10 11:14:25 · 564 阅读 · 0 评论 -
【转载】C语言结构体里的成员数组和指针
转自陈皓大神,请查看原贴,感谢作者分享https://coolshell.cn/articles/11377.html单看这文章的标题,你可能会觉得好像没什么意思。你先别下这个结论,相信这篇文章会对你理解C语言有帮助。这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接。微博截图如下。我觉得好多人对这段代码的理解还不够深入,所以写下了这篇文章。为...转载 2019-09-10 11:35:42 · 120 阅读 · 0 评论 -
内存越界,为什么会崩溃
内存越界,为什么会崩溃越界操作引起的崩溃根源一般是下面两种情况1.权限问题 – 访问了没有相应访问权限的地址.一般读越界引起崩溃都是这种. 多数写越界也会直接或间接引起这种问题.2.代码执行出错 – 执行了非法的代码或是由数据错误引起的代码执行异常. 这种错误多由写越界引起.比如写坏了栈导致执行的非法代码,读取错误数据. 写坏了堆引起堆管理代码执行异常等等.越界就好比踏进了地雷区。很可能生...原创 2019-08-31 11:18:31 · 3168 阅读 · 0 评论 -
【转载】【编程基础】C语言内存使用的常见问题
【编程基础】C语言内存使用的常见问题转载自:https://cloud.tencent.com/developer/article/1059228程序员互动联盟发表于程序员互动联盟订阅498在这篇文章中:一、 数据区内存 1内存越界 2 多重定义 3 volatile修饰 二、 栈区内存 1 内存未初始化 2 堆栈溢出 3 内存越界 4 返回栈内存地...转载 2019-08-31 11:15:47 · 309 阅读 · 0 评论 -
【转载】C语言思维导图知识总结
C语言思维导图知识总结转载自:https://blog.csdn.net/t595180928/article/details/80743797此图本人亲自经过数日日夜夜总结、修改而来,方便查阅记忆,复习总结!...转载 2019-08-28 10:29:50 · 230 阅读 · 0 评论 -
【转载】C语言static 关键字总结
static 关键字总结:变量可以被static 修饰,意义有发生变化吗?下面我们看个例子:(1)变量不加 static 修饰#include <stdio.h>void test(){ int num = 0; num++; printf("%d ", num);}int main(){ int i = 0; ...原创 2019-08-28 10:29:40 · 111 阅读 · 0 评论 -
【转载】C语言volatile
2017年10月20日 12:00:10 小帅哥gaoyi 阅读数 274 文章标签: volatile 更多分类专栏: C版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/gaoyi221119/article/details/78293962volatile是易变的,不稳定的意...转载 2019-08-27 16:02:00 · 102 阅读 · 0 评论 -
vs中debug和release版本的区别
vs中的程序有debug和release两个版本,Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发 人员提供强大的应用程序调试能力。而Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信 息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。debug程序通常比...转载 2019-08-27 15:53:39 · 419 阅读 · 0 评论 -
【转载】字节对齐的规则总结
字节对齐的规则总结2017年09月15日 11:11:44小帅哥gaoyi阅读数 5118更多分类专栏:#单片机版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/gaoyi221119/article/details/77989522一、什么是字节对齐,为什么要对...转载 2019-08-27 15:46:08 · 1624 阅读 · 0 评论 -
【转载】在linux下使用gcc/g++编译多个.h .c 文件
编译---链接过程 要理解C文件与头文件有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:1.预处理阶段2.词法与语法分析阶段3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,编译器在编译时是以C文件为单位进行的,也就...转载 2019-08-27 14:56:25 · 5614 阅读 · 0 评论 -
[转载]5分钟搞定内存字节对齐
5分钟搞定内存字节对齐时间 2009-04-16标签 struct 存储 编译器 gcc 测试 google 栏目 GCC原文 http://blog.csdn.net/hairetz/article/details/4084088写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧./...转载 2019-08-27 14:23:50 · 102 阅读 · 0 评论 -
计算结构体成员偏移量
问题写一个宏计算出结构体成员的偏移量。假设有如下一个结构体,要计算成员c的在结构体中的偏移量。typedef struct Type_t{ char a; // 0 int b; // 4~7 double c; // 8~16};注意,上述的结构体必须考虑字节对齐的问题。关于字节对齐的问题,可以参照5分钟搞定内存字节对齐,里面总结得非常到位。...转载 2019-08-27 14:14:51 · 174 阅读 · 0 评论 -
C语言字符数组的初始化与赋值
字符数组的初始化与赋值Dabelv转载自 https://cloud.tencent.com/developer/article/1177439代码编译运行环境:VS2017+Win32+Debug1.字符数组的初始化方式C语言中表示字符串有两种方式,数组和指针,字符数组是我们经常使用的方式。变量的定义包括指明变量所属类型、变量名称、分配空间以及初始化。可以看出,变量的初始化是变量定义的...转载 2019-08-27 10:34:40 · 1896 阅读 · 0 评论 -
结构体数组初始化
结构体数组初始化转载自:https://blog.csdn.net/dengziliang001/article/details/87208082010-06-19 00:25 与诸君共进步 | 分类:其他编程语言 | 浏览4497次struct city{char name[20];double population;double housing;double ave;};ci...转载 2019-08-26 21:53:24 · 970 阅读 · 0 评论 -
内存越界详解
内存越界是软件系统主要错误之一,其后果往往不可预料且非常严重。更麻烦的是,它出现的时机是随机的,表现出来的症状是随机的,而且造成的后果也是随机的,这会使程序员很难找出这些 Bug 的现象和本质之间的联系,从而给 Bug 的定位带来极大的困难。一般情况下,内存越界访问可分如下两种:读越界,即读了不属于自己的数据。如果所读的内存地址是无效的,程序立刻崩溃;如果所读内存地址是有效的,在读的时候不会马上...转载 2019-07-02 21:18:10 · 1456 阅读 · 0 评论 -
【转载】C语言中const关键字的用法
本文转载自链接:https://blog.csdn.net/xingjiarong/article/details/47282255转载请注明出处http://blog.csdn.net/xingjiarong/article/details/47282255关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有...转载 2019-08-28 10:28:50 · 108 阅读 · 0 评论 -
【转载】结构体数组初始化、变长结构体--尾部占位符
https://blog.csdn.net/weixin_34211761/article/details/89701698struct city{ char name[20]; double population; double housing; double ave;};city cities[2];cities[0]={"A",10000,11};cities[1]=...转载 2019-08-28 10:29:06 · 403 阅读 · 0 评论 -
【转载】打开c语言生成exe文件,出现闪退的解决方法
额,在给大一学弟上第一节实验课的时候,经常有学弟问我,为什么打开c语言生成的exe文件,立马闪退。起初个别问的时候,我只是简单的说明程序运行完了,就自动关了,现在先不用涉及这个,以后自然懂了。但是后来问的人多了,我就觉得有必要先给他们提一下了。首先,生成的exe文件本质是控制台程序,这些都是依赖于windows的控制台窗口,程序执行完就退出了。(比如,如果你程序中有scanf语句,那么...转载 2019-08-30 11:27:22 · 1383 阅读 · 0 评论