C语言基础知识
文章平均质量分 60
Gay~
Those times you get up early you work hard,Those times you stay up late and you word hard,Those times when you don't feel like working,you too tired,you don't want to push yourself,but you do it anyway,That is actually the dream,That's the dream,it's not the destnation,it's the journey.
展开
-
C语言的“短路”现象
即:a=1,b=2,c=3,d=1;(在C语言中0表示假,非0表示真,但是一般直接用1表示真)对于这么一个代码,很多人的第一反映的答案就是:(每一个变量都+1,最后d也是1)答案是: a=2,b=1,c=1,d=1;答案是 a=2,b=2,c=3,d=1;可以看出答案好像并不是像我们想的那样哦;但是答案真的是这样吗?也不是,那这说明了什么问题呢?这就是C语言中的短路现象。原创 2022-12-20 01:12:53 · 1723 阅读 · 5 评论 -
左移(<<),右移(>>), (i++ 如果没有接收方,那么“先使用”,如何理解?),取余和取模一样吗?
右移:先判定是算术右移还是逻辑右移,判定依据:看自身类型,和变量的内容无关,判定了是算术右移还是逻辑右移,才决定最高位补什么。但是在python中,-10%3=2(原因是python中采用了向负无穷取整,所以是商-4余2(正余数))对任何一个小于0的数,对其进行0向取整和负无穷取整,取整方向是不一致的,故取余不等价于取模。对于任意一个大于0的数,对其进行0向取整和负无穷取整,取整方向是一致的,故取余等价于取模。在C语言中,-10%3=-1(因为C语言采用的是向0取整,所以是商3余-1(负余数))原创 2022-12-15 00:31:38 · 454 阅读 · 6 评论 -
宏定义设置x二进制序列的第n个比特位为1或者0
其实这个毛病也是很多C语言的新手的一个通病,我们知道,a=10,a+10的结果虽然是10,但是a依旧还是a,a本身的值并没有发生变化,而这里的按位或运算也一样,x |(1原创 2022-12-14 20:23:00 · 561 阅读 · 7 评论 -
C语言关键字之const和volatile
C语言关键字之const和volatile。原创 2022-12-13 23:30:07 · 163 阅读 · 4 评论 -
C语言关键字之extern和static
C语言关键字原创 2022-12-03 17:09:17 · 314 阅读 · 5 评论 -
if~else语句的执行过程及几个数据与零值比较时的注意事项
if()语句到底是怎么执行的,你知道吗?很多人或许都会说if()语句不就是看()里面的语句是真还是假吗?为真就执行紧跟着if()后面的语句,为假就再判断后面的分支语句。其实不然,if~else语句的执行过程实际上是可以分为三步的。一、先执行()中的表达式,得到真假逻辑结果。(无论什么情况都是优先算括号里面的表达式得到一个真假结果的)二、进行条件判定功能,即判断得到的逻辑结果是真还是假。三、进行分支功能,即如果逻辑结果为真就执行紧跟在if()后面的语句,否则就往下判断。这里强调一点,很多人都忽略了if原创 2022-12-07 23:15:29 · 1195 阅读 · 4 评论 -
C语言有关char数组的一个经典例题及char的取值范围推导的思维图
大家先读一下上面这段代码,思考一下这个结果是多少,“这不是很简单吗?i 循环了1000次,那字符串的长度不就是1000吗?”如果你这样想,那你就危险了。下面我们先来揭晓答案。 惊讶吗?答案居然是255,这个答案是怎么来的啊? 下面我们一起看一下到底发生了什么? 这次终于真相大白了,你了解了吗?欢迎评论区发表你们的观点。 下面再分享一个char类型的取值范围的图形,希望能帮助大家理解char类型的取值范围为什么是-128~127。原创 2022-12-07 11:04:41 · 361 阅读 · 3 评论 -
C语言中unsigned int a=-10,这种写法是否正确?
unsigned int a=-10写法正确吗?原创 2022-12-04 14:19:50 · 806 阅读 · 2 评论 -
C语言数组越界造成的死循环例子,当你得到了这个意想不到的结果的时候,你肯定不知道为什么,看你还敢不敢越界访问数组了
在调试时你会发现arr[12]的值和i的值始终相等,当i=12的时候,再按一次F10,你会发现i的值又变回了0,如上图所示,原来原因就在这里,每次当i=12的时候arr[12]被改成0的同时i又被改成0了,所以i原创 2022-11-26 19:54:02 · 503 阅读 · 3 评论 -
C语言32个关键字及其分类
(5)typedef:用以给数据类型取别名(但是该关键字被分到存储关键字分类中,虽然看起来没什么相关性)(1)return:函数返回语句(可以带参数,也可以不带参数)12、void:声明函数无返回值或无参数,声明无类型指针。(2)extern:声明变量实在其他文件中声明。(1)auto:声明自动变量,一般不使用。(3)register:声明寄存器变量。2、short:声明短整型变量或函数。7、float:声明浮点型变量或函数。1、char:声明字符型变量或函数。4、long:声明长整型变量或函数。原创 2022-12-13 22:15:29 · 383 阅读 · 4 评论 -
程序环境和预处理
/不推荐后面加上";",容易出现错误 # define A 10 //推荐10;//不推荐后面加上";",容易出现错误 # define A 10 //推荐10//不推荐后面加上";",容易出现错误 # define A 10 //推荐#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(define macro)。原创 2023-02-09 22:37:08 · 557 阅读 · 4 评论 -
C语言文件操作
磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。原创 2023-02-05 00:43:25 · 489 阅读 · 2 评论 -
自定义类型:结构体,枚举,联合
位段的声明和结构是类似的,有两个不同:1.位段的成员必须是 int、unsigned int 或signed int整形家族。2.位段的成员名后边有一个冒号和一个数字。int _b : 5;A就是一个位段类型。那位段A的大小是多少呢?你可能会说,简单,不就是4个整形的大小吗?16个字节!但是真的是这样吗?显然不是,如果就是这样的话那它和结构体有什么区别啊?干脆用结构体不是更好?那我们看看结果到底是多少?原创 2023-01-22 00:53:56 · 660 阅读 · 6 评论 -
数据的存储
什么是大小端?大端(存储)模式,是指数据的低 (权值) 位保存在内存的高地址中,而数据的高 (权值) 位,保存在内存的低地址中;小端(存储)模式,是指数据的低 (权值) 位保存在内存的低地址中,而数据的高 (权值) 位,保存在内存的高地址中。(口诀:小小小端,其余大端)原创 2023-01-04 13:27:31 · 722 阅读 · 14 评论 -
一维数组传参问题
7、所以指针和数组访问元素的方式是通用的,假设它两不通用,程序员就需要不断从不同的代码片段处,进行习惯的切换,久而久之,人总是会犯错的,所以代码出错的概率就会大大地增加了。原因是如果不降维,每一次数组传参的时候,因为传参传的是变量,所以要发生数组拷贝,如果是一个超级大的数组,那么函数调用的效率就会降低,所以要降维成指针。6、C语言是面向过程的语言,函数是核心的概念,会经常定义与调用函数,传参,数组,数组传参,为了提高效率,所以要发生降维,降维成指针。1、数组传参,是要发生降维的,降维成指针。原创 2022-12-21 21:53:00 · 250 阅读 · 4 评论 -
宏、条件编译(#ifdef)、#include(头文件包含)、#error和 #pragma的区别、#和##的含义和应用
意思是只有第一次检测的时候xxx没有被定义,然后定义xxx再进入#ifdef和#endif内部,因为此时xxx已经被定义了,所以往后的每一次#ifndef都不成立,所以不会进到内部,所以能有效地避免了头文件的重复包含。(2)所有的头文件包含,都必须带上条件编译,防止被重复包含,即重复拷贝,影响编译效率。5、#if:判定的不仅是这个宏是否被定义,还要判定定义的宏的值是真是假。4、#ifdef:判定的是宏是否被定义,与宏定义的值是真是假没有关系。#error就是通过报错的方式直接阻止编译器完成编译。原创 2022-12-20 17:09:28 · 1298 阅读 · 5 评论 -
可能你看到的大部分教材里讲的指针和指针变量是一个概念,但是真的是这样吗?看完我这篇文章肯定会颠覆你的认知哦?
指针的本质就是地址!地址的本质是什么?地址就是数据。指针变量的本质是变量,是用来存放地址的!也就是说指针变量是用来存放数据的。原创 2022-12-18 17:18:37 · 911 阅读 · 10 评论