C语言基础入门48篇
文章平均质量分 63
48篇文章解决C语言基础问题,适合有一定基础学习C及C++之用
十月旧城
winter is coming
展开
-
C语言基础入门48篇_番外篇_条件编译(预处理中的条件编译是一种可以决定编译哪些代码的机制、#if...#endif、#if和defined,非defined相结合/#ifdef和#ifnde)
在C语言中有一种机制可以决定编译哪些代码,这个机制就是预处理中的条件编译。本篇主要介绍常用的判断语句。总结如下:1.判断语句条件编译#if…#endif的使用2.是否被定义:#if预处理和defined,!defined预处理相结合的方式使用简写的#ifdef和#ifndef的形式3.多重判断#if…#elif…#else…#endif4. .h文件中条件编译语句的含义使用条件编译,你可以选择代码的一部分是否被正常编译,C中条件编译的主要形式有三种。1.判断语句条件编译#if...#e原创 2022-03-22 15:15:37 · 1223 阅读 · 0 评论 -
C语言基础入门48篇_48_文件的写入与读取(fwrite()文件的读取、fread()文件的写入、文件的读取与写入实质即为信息在磁盘与内存直接转换、核心问题:数据在磁盘哪?数据在内存哪?多少数据?)
fread与fwrite 从信息的转换角度看,文件的读取与写入,其实就是信息在文件介质(磁盘)与内存之间进行转换。文件读取(fread),就是将磁盘中的文件内容,读取进内存中;而文件写入(fwrite),就是将内存中的内容,写入到磁盘中。那么他们就会面临几个关键问题:数据在磁盘哪里?数据在内存哪里?有多少数据?了解以上信息后,就不难理解fread与fwrite的函数原型:1. 文件写入fwritesize_t fwrite( const void *buffer, size_t size原创 2022-02-28 15:12:08 · 519 阅读 · 0 评论 -
C语言基础入门48篇_47_C语言操作文件(文件操作函数、打开文件fopen()、关闭文件fclose()、fclose规范程序、野指针的定义为:指针地址存在,但是指针指向的是一个已经释放的资源)
本篇主要介绍c语言中对文件的打开关闭操作。1. C语言文件操作函数C标准库中提供了一系列的函数,来操作文件。因为C库函数做了这个中间层,屏蔽掉了操作系统上对于文件的不同处理。关于文件的常见基本操作有:打开文件fopen():创建文件或打开文件载体(磁盘)中已有的文件关闭文件fclose():类似free,释放掉内存中与文件有关的动态资源读取文件fread():数据由文件载体(磁盘)到内存写入文件fwrite():数据由内存到文件载体(磁盘)2. fopen:打开或创建文件fopen的原创 2022-02-28 14:29:34 · 402 阅读 · 0 评论 -
C语言基础入门48篇_46_malloc与free(malloc申请堆返回void要指针强转、free释放堆,只需堆内存首地址、malloc配合sizeof增加可读性、注意出{}作用域导致无法释放)
从上篇C语言基础入门48篇_45_内存的分区:全局区、栈区、堆(全局区main执行前分配好,存储程序代码及全局变量、栈区M级别随着函数调用返回自动分配回收,存储局部变量、堆大量内存动态分配、回收的内存区域)知道,不管是全局区还是栈区的内存,他们通常都只占可以使用的内存的一小部分,大量的内存被操作系统控制,按需动态分配, 内存一直都存在,但是我们程序是否能够使用,使用哪块地址的内存,取决于操作系统如何分配给我们,被操作系统控制管理的动态分配、回收的内存区域,就称为堆。本篇介绍c语言中进行申请堆和释放堆中内存原创 2022-02-28 13:48:57 · 489 阅读 · 0 评论 -
C语言基础入门48篇_45_内存的分区:全局区、栈区、堆(全局区main执行前分配好,存储程序代码及全局变量、栈区M级别随着函数调用返回自动分配回收,存储局部变量、堆大量内存动态分配、回收的内存区域)
不久的将来,我们要开始学习在C中动态申请和释放内存。在学习它们之前,我们先学习程序内存的分区,为掌握和理解动态申请、释放内存做好基础铺垫。1. 为什么程序的内存有分区一般而言,我们的住房会分成多个区域(卧室、厨房、阳台、卫生间等),不同区域有不同的功能。运行时,程序分区的道理也是一样的,它方便操作系统管理程序,内存的不同区域,功能不同。通过一个例子可以看到全局变量和局部变量存储的区域是不一样的。#include <string.h>#include<stdio.h>i原创 2022-02-25 14:21:29 · 197 阅读 · 0 评论 -
C语言基础入门48篇_44_静态局部变量、静态全局变量、静态函数(静态局部变量只被初始化一次,保留变量值、静态全局变量是加了作用域的全局变量、静态函数亦是加了作用域的函数)
静态局部变量、静态全局变量、静态函数(静态局部变量只被初始化一次,保留变量值、静态全局变量是加了作用域的全局变量、静态函数亦是加了作用域的函数)原创 2021-12-08 22:30:37 · 2439 阅读 · 0 评论 -
C语言基础入门48篇_43-枚举enum(枚举的本质是数字、类似于switch、更直观、标志变量、非基本数据类型)
1. 标志变量在某些编程情况下,我们可能会根据某个变量决定使用多分支中某一个的情况,我们常使用一个标志变量存储分支的状态。如以下的代码中nChoice即为标志变量,根据其输入的值通过switch函数决定对应的case。#include <stdio.h>int main(int argc, char* argv[]){ int nChoice = -1; scanf("%d", &nChoice); switch (nChoice) { case 0: prin原创 2021-11-27 21:28:06 · 1144 阅读 · 0 评论 -
C语言基础入门48篇_42_共用体(关键字union,共用体占用大小为成员中最大值、结构体为所有成员相加,所占内存比单纯相加大)
1. 共用体的定义与使用共用体的关键字是union,共用体是非基本数据类型,同结构体类似,我们需要先声明共用体类型,再利用自定义的类型去定义变量。#include <stdio.h>#include <string.h>union MyUnion{ double dbWeight; int nID; char szName[8];};int main(int argc, char* argv[]){ MyUnion unionVal原创 2022-02-25 14:00:08 · 878 阅读 · 0 评论 -
C语言基础入门48篇_41_使用结构体封装游戏角色(将角色的坐标值进行封装)
在之前C语言基础入门48篇_31_二维数组应用之游戏中的碰撞检测(二维数组初始化边界,利用边界值判断是否可移动)中我们实现了游戏边界的检测功能,本篇将会使用结构体对游戏角色进行封装。关于游戏封装的思考1.原代码#include <windows.h>#include <conio.h>#include <stdio.h>void MoveCursorTo(int nRow, int nCol){ COORD crdLocation; crd原创 2022-02-25 13:37:54 · 262 阅读 · 0 评论 -
C语言基础入门48篇_40_结构体指针(结构体指针定义与基本数据结构指针类似,使用*、指针用->引用成员,变量用.引用成员、当使用结构体时建议用结构体指针作为参数)
1. 结构体指针的定义结构体指针的定义与基本数据结构的指针类似,使用"*"符号即可:#include <stdio.h>struct tagPetDog{ char szName[20]; char szColor[20]; char nWeight;};int main(int argc, char* argv[]){ tagPetDog dog = { "旺财", "黄色", 5 }; tagPetDog* pDog = &do原创 2022-02-25 13:13:20 · 206 阅读 · 0 评论 -
C语言基础入门48篇_39_结构体的定义与使用(struct、结构体将同一事物不同属性集中在一个变量中,增加内聚性、是一种非基本数据类型,可将多种数据组合为新的数据类型进行使用)
1. 为什么要使用结构体结构体将同一事物的不同属性集中在一个变量中,增加了内聚性。生活中的事物,往往有多种属性,我们为了记录和表示他们,需要围绕一个事物,记录多中数据。如一只宠物狗,他可能有:姓名、颜色、体重。我们可以使用三个不同的变量记录它:#include <stdio.h>int main(int argc, char* argv[]){ char szName[20] = { "旺财" }; char szColor[20] = { "黄色" };原创 2022-02-24 16:37:07 · 199 阅读 · 0 评论 -
C语言基础入门48篇_38_函数指针与typedef(函数指针即指向函数的指针、函数指针定义int (*pfn)(int)、typedef给数据类型起别名,起到的作用一致、typedef简化函数指针)
1. 函数指针的定义函数就是在内存中的一段机器码,也是有地址的,函数名即为函数的首地址。#include <stdio.h>void fun(){ printf("hello, world\r\n");}int main(int argc, char* argv[]){ printf("%p\r\n", fun); return 0;}运行结果:打印出函数的首地址函数指针: 既然有地址,就可以定义指针存储该地址,存储函数(首)地址的指针,称为函原创 2022-02-24 14:28:59 · 2719 阅读 · 0 评论 -
C语言基础入门48篇_37_指针数组与数组指针(指针数组:元素是指针的数组、数组指针:指向数组的指针、数组指针可以用来指向二维数组的行地址)
1.指针数组指针数组是数组,即一个数组中,每个元素都是指针。#include <stdio.h>int main(int argc, char* argv[]){ int nValue1 = 1; int nValue2 = 2; int nValue3 = 3; int * nArray[3] = { &nValue1, &nValue2, &nValue3 }; char* sz1 = "hello"; ch原创 2022-02-24 13:49:11 · 442 阅读 · 0 评论 -
C语言基础入门48篇_36_指针相关的运算(指针可以比较大小、指针+1,实际是地址值加上指向的数据类型的大小、p1++可以实现数据的遍历)
1. 比较大小指针是地址的数字编码,同类型的指针是可以比较大小的,不同类型的指针不能比较大小:#include <stdio.h>int main(int argc, char* argv[]){ int nValue1 = 0; int nValue2 = 0; int* p1 = &nValue1; int* p2 = &nValue2; printf("p1: %p\r\n", p1); printf("p原创 2022-02-24 13:23:16 · 1069 阅读 · 0 评论 -
C语言基础入门48篇_35_指向同一个地址的指针的内涵(“(TYPE) 变量“实现强制转换、n = (int)m、指针作为存储地址的变量,有2个内涵:指向哪里和按照指针的类型进行数据解释)
1. C语言中的强制类型转换C语言中运行将数据类型强制转换,使用:(TYPE) 变量如下在当前的VS中看起来已经进行了默认的隐式转换,只保留了整数位,会有数据丢失的警告:#include <stdio.h>int main(int argc, char* argv[]){ int nValue = 0; double fltValue = 3.14; nValue = fltValue; return 0;}强制转换后结果:与编译器默认处理的结原创 2022-02-23 16:55:44 · 437 阅读 · 0 评论 -
C语言基础入门48篇_34_通过指针实现函数交换两个变量的值(内存地址所对应的内存区域的数据交换、解引用就是根据地址对内存中的数据进行操作)
1. 回顾:函数的值传递因为函数的调用过程中,实参到形参是值传递(值的拷贝),因此,改变形参,是无法影响到实参的:#include <stdio.h>void FakeSwap(int nArg1, int nArg2){ int nTemp = nArg1; nArg1 = nArg2; nArg2 = nTemp;}int main(int argc, char* argv[]){ int nValue1 = 100; int nVa原创 2022-02-23 13:54:39 · 440 阅读 · 0 评论 -
C语言基础入门48篇_33_指针的定义,赋值及解引用(定义:类型 *指针变量名、解引用:*指针变量、指针前的类型是指向的数据的类型,指针变量的大小,32位:4字节,64位:8字节)
1. 指针的定义语法指针变量中存放的是其他变量的地址,因此指针的类型,也与其要存放的地址类型有关。存放int型变量地址的指针,也有存放double型变量地址的指针。指针前的类型是指向的数据的类型,指针变量的大小与调试使用的是32位还是64位计算机相关,32位下的为4字节,64位的为8字节。具体而言,指针变量的声明语法是:类型 *指针变量名;如:int *pIntValue = NULL;double *pDoubleValue = NULL;以上分别定义了一个可以保存int变量地址以及可以保存do原创 2022-02-23 13:31:52 · 332 阅读 · 0 评论 -
C语言基础入门48篇_32_指针铺垫知识:计算机分级结构(CPU<-->内存<-->硬盘、程序存储在硬盘,运行程序时,操作系统将程序拷贝到内存,通过总线读取内存数据)
1. 计算机的体系结构计算机采用的为分层结构,主要分为两种结构:冯诺依曼体系结构:绝大多数电脑的结构哈佛体系结构虽然存在不同的结构,但主要的结构均采用以下三种的层次:2. 程序运行时各个层次作用(1) CPU是计算的核心,用于解析机器码和执行指令。CPU的数据处理能力非常快,但是(寄存器的)存储空间非常有限。(2)内存的数据传输速度适中(与CPU、硬盘比),存储空间适中;(3)硬盘数据传输速度慢,存储空间大,我们的程序数据一般都是存于硬盘。总结: 硬盘传输速度太慢,如果直接从硬盘读取原创 2022-02-22 14:13:42 · 547 阅读 · 0 评论 -
C语言基础入门48篇_31_二维数组应用之游戏中的碰撞检测(二维数组初始化边界,利用边界值判断是否可移动)
本篇在上篇C语言基础入门48篇_18_使用循环移动游戏人物(屏幕符号运动、while(1){}进行实时响应,if(表达式){},switch(表达式){},windows的API及API进行自行封装使)的基础上增加了移动边界,并且游戏人物不会移动出所设计的边界。1. 没有碰撞检测的版本#include <windows.h>#include <conio.h>#include <stdio.h>void MoveCursorTo(int nRow, int n原创 2022-02-22 13:42:30 · 488 阅读 · 0 评论 -
C语言基础入门48篇_30_二维数组的定义与使用(二维数组的定义:type 数组名[行][列]、二维数组的初始化、二维数组的引用)
1. 二维数组的定义type 数组名[行][列]2. 二维数组的初始化2.1 全部初始化为0char chAry[2][3] = { 0 };实例:#include <stdio.h>#include <string.h>int main(int argc, char* argv[]){ char chArray[2][3] = {0}; return 0;}运行结果:2.2 全部初始化为特定值char chAry[2][3] = { 0x00,原创 2022-02-21 14:17:27 · 513 阅读 · 0 评论 -
C语言基础入门48篇_29_对于字符串的sizeof与strlen的区别(sizeof运算符,编译时求各种变量、类型大小,对字符串包括结尾’\0’、strlen求字符串的长度函数,不包括结尾’\0’)
sizeof与strlen的不同表现看程序说结果:#include <stdio.h>#include <string.h>int main(int argc, char* argv[]){ char* szHello = "Hello"; printf("%d\r\n", sizeof(szHello));//输出指针变量长度,32位的均为4字节 printf("%d\r\n", sizeof("Hello"));//编译器将0也包含在内原创 2022-02-21 13:50:18 · 199 阅读 · 0 评论 -
C语言基础入门48篇_28_C标准库中常见的字符串操作函数(字符串非基本数据类型,不可用运算符操作、字符串比较strcmp、获取字符串长度strlen、复制字符串strcpy、连接字符串strcat)
1. 字符串的特殊性字符串不是基本数据类型。因此,像操作基本数据类型那样操作,可能会失败。如下例如使用关系运算符==进行比较就会报错#include <stdio.h>int main(int argc, char* argv[]){ char* szHello = "Hello"; char chAry[] = "Hello"; printf("%s, %s\r\n", szHello, chAry); if (szHello == chAry)原创 2022-02-21 13:35:56 · 261 阅读 · 0 评论 -
C语言基础入门48篇_27_字符串string(非C基本数据类型,约定存储多个char数据的方式、定义字符串时编译器分配空间,复制字符,添加0结尾标志,返回首地址、字符数组可读可写,字符串可读不可写)
1. 什么是字符串C语言中的字符串不是一种基本类型,是一种【约定】之前我们已经学过单个字符的文字型数据(char),在C语言中,字符串用双引号包围。#include <stdio.h>int main(int argc, char* argv[]){ printf("Hello"); return 0;}字符串不是C语言中的基本数据类型。在我们之后的学习中可以看到,它是根据约定存储多个char数据的一种方式。2. C语言中的字符串为了方便研究,我们将以上代码原创 2022-02-18 15:01:18 · 610 阅读 · 0 评论 -
C语言基础入门48篇_26_身份证号校验程序(以身份证的校验方式是实例加深对数组及函数封装的理解、字符-‘0‘得到字符对应的int类型数字)
本篇根据以二代身份证的校验方式是实例加深对数组及函数封装的理解1. 第二代身份证号的组成第二代身份证号为18位,各位数字对应了不同的信息(以下顺序从左往右):AABBCCYYYYMMDDXXXV其中,最后一位校验数字,是通过之前的信息计算得来,拿到一个身份证号,可以通过重新计算校验数字并与最后一位做比较,判断是否身份证号不合要求。1. 2 校验算法身份证校验算法的计算过程是:根据各位权重,求得校验和对校验和取余(11),求得校验序号根据校验序号,找到对应的校验码各位权重身份证号从原创 2022-02-18 14:03:50 · 858 阅读 · 0 评论 -
C语言基础入门48篇_25_数组的定义与使用(数组名是数组在内存中的首地址、数组中的所有元素都是连续排放的)
1. 为什么需要数组在编程的有些场景中我们可能需要使用多个同类型变量。这时候,使用数组更方便。如,需要5个double变量保存5个同学的成绩,并计算平均成绩,不使用数组时:#include <stdio.h>int main(int argc, char* argv[]){ double score1 = 89.8; double score2 = 59; double score3 = 85; double score4 = 70; doub原创 2022-02-17 16:30:30 · 856 阅读 · 0 评论 -
C语言基础入门48篇_24_局部变量与全局变量(局部变量作用域在函数{}中,多函数同名不影响、全局变量整个工程内有效,多函数操作会影响、多cpp共用全局加extern、全局命名规范前加g_)
变量可以定义在函数内部也可以定义在函数外部,根据定义的位置不同,分为 局部变量和 全局变量。局部变量与全局变量的作用域不同。1. 局部变量定义在函数内部的变量是局部变量,局部变量。局部变量的作用域限定在当前函数中,即{}内。不同的函数中相同名字的局部变量不会互相影响。#include <stdio.h>void Func1(){ int nValueLocal = 0x12345678; printf("Func1中的局部变量:%X\r\n", nValueLocal原创 2022-02-17 14:17:51 · 581 阅读 · 0 评论 -
C语言基础入门48篇_23_函数的参数与返回值、变参(形参相当于复制无法改变传入的实参值、函数调用参数及返回值必须匹、return结束当前函数,将返回值带回调用方、变参...不限制参数个数)
前文可知函数的调用只需要函数的参数类型、个数及返回值匹配就可以。1.形参与实参函数调用时,传递的参数,称为实参;函数定义时,在参数列表中声明的参数,叫做形参。函数在调用的过程中,实参传递的过程,其实会复制一份给形参,因此,函数内部形参的值的改变,不会影响到调用方传递的实参。(1)函数传递的举例:void FakeChangeValue(int x){ x += 5; printf("函数内部改变数值后:%d\r\n", x);}void main(void){原创 2022-02-17 13:46:19 · 623 阅读 · 0 评论 -
C语言基础入门48篇_22_标准库函数在Windows及Linux下的查询与使用(Windows下的MSDN、Linux下的Manual Page)
1.什么是C标准库函数C标准除了约定了C语言的语法规范外,还规定了一些常见功能的接口,如输入、输出、数学计算、文件操作等。他们集合在一起,就是C标准库函数。我们已经使用过的printf、scanf等就来自标准库函数。我们需要包含特定的头文件,才能使用特定的库函数(比如,printf、scanf的声明就来自stdio.h中)。2.初学者常常面对的几个问题标准库函数有哪些?要使用某个标准库函数,需要包含哪个头文件?该库函数到底如何使用?因为C标准库函数遵循C标准,所以与平台无关,不管是哪个操原创 2022-02-16 16:49:35 · 612 阅读 · 0 评论 -
C语言基础入门48篇_21_定义和使用自己的函数(函数结构:输入参数-->实现功能-->返回值,类似数学中函数、参数可以多种、返回值一种类型、函数声明与实现、#include语句本质是复制粘贴)
定义和使用自己的函数:函数结构可以总结为:输入参数-->实现功能-->返回值1. 函数的实现的基本语法返回值类型 函数名称(形参列表){ 函数体语句}如我们之前所定义的判断数字奇偶的函数:int IsEvenNumber(int nNumber){ if (nNumber % 2 == 0) return 1; else return 0;}2. 函数的返回值与参数上面的函数的返回值和参数分别为:返回值类型是int(原创 2022-02-16 16:31:16 · 200 阅读 · 0 评论 -
C语言基础入门48篇_20_函数入门:为什么使用函数?(函数使得程序模块化 使用函数封装细节,使得程序员只要面向函数的接口编程(参数与返回值),而不用关心函数内部细节)
菜鸟和高手都会基本,那菜鸟为什么是菜鸟,高手为什么是高手呢?很大的区别在于,高手写的程序【结构性】更好,更容易维护。而函数就是C语言结构化的一种手段。函数可以将大的计算任务划分为多个较小的任务(解耦合),一个设计得当的函数可以将不必要的细节给隐藏起来使程序的整个结构更加清晰,也降低了维护代码的难度。我们其实已经多次使用(调用)函数:printf、scanf都是C标准库的函数,从之前的使用经历,也能体会到上一句话的意义。我们以下再看一个具体例子的修改过程。1.实现判断数字的奇偶性#include &原创 2022-02-16 14:21:21 · 7591 阅读 · 0 评论 -
C语言基础入门48篇_19_do-while循环、for循环、break与continue(break与continue用于3种循环,break跳出循环体、continue结束本次循环,下一循环判断)
除了while循环外,C语言中还提供了do…while及for循环另外两种循环语句.1. do…while循环do…while循环的语法为:不管条件表达式是否成立,循环语句至少循环一次,其他是与while一致的do{ 循环体语句;}while(条件表达式);使用do…while打印0到9:#include <stdio.h>int main(int argc, char* argv[]){ int i = 0; do { pr原创 2022-02-16 13:52:33 · 271 阅读 · 0 评论 -
C语言基础入门48篇_18_使用循环移动游戏人物(屏幕符号运动、while(1){}进行实时响应,if(表达式){},switch(表达式){},windows的API及API进行自行封装使)
本篇介绍使用循环语句实现指定符号的坐标移动,使用到了while(1){}进行实时响应,if(表达式){},switch(表达式){},windows中封装的API并对API进行自行封装使用。1.实现的功能本例的程序实现了*可以在WASD的控制下做位置移动。2.需要包含的头文件因为这次课的内容需要使用C标准库之外的一些函数(C的编译器中会包含标准的函数),因此,需要包含对应的windows头文件。Windows.h:我们将使用其提供的函数,实现任意位置输出conio.h:我们将使用其中的函数,原创 2022-02-15 14:16:59 · 2890 阅读 · 0 评论 -
C语言基础入门48篇_17_while循环(while(条件表达式) {条件表达式成立时要执行的循环体 }、条件表达式为真执行{}内循环语句,为假跳出循环,执行{}外语句)
1. 什么是循环在编程中,某些解决方案可能具有规律性的重复操作。比如,算自然数1至5的总和。1+2+3+4+5=15如果手算,我们可能会利用等差数列求和公式:S5 = ( 1 + 5 ) × 5 /2 = 15如果使用C语言编程,因为计算机的计算速度很快,我们可能不在意直接将每一项相加求结果:#include <stdio.h>int main(int argc, char* argv[]){ int nSum = 0; nSum += 1; nSum +=原创 2022-02-15 13:32:18 · 1692 阅读 · 0 评论 -
C语言基础入门48篇_16_switch分支语句(switch(表达式){}、按照表达式决定运行的块、break用于跳出switch后的块作用域、多个case写到一块、switch后只能接整型表达式)
1.switch分支语句的基本语法switch(表达式){ case 常量1: 语句块1 break; case 常量2: 语句块2 break; ... case 常量n: 语句块n break; default: 默认语句块}switch后接的表达式的值,如果匹配之后的case常量,则跳转到对应的语句块并执行。如果全部case都不匹配,则跳转到原创 2022-02-14 16:02:44 · 459 阅读 · 0 评论 -
C语言基础入门48篇_15_条件运算符(expr1?expr2:expr3,三元运算符,||等为二元运算符、expr1非0,值为expr2;expr1值为0,值为expr3)
条件运算符是C语言中唯一的三元运算符,其基本形式为:expr1?expr2:expr3,一个条件运算符需要它需要三个表达式。1.条件运算符的运算规则条件运算符是为了简化if…else语句而发明的,比如:int main(int argc, char* argv[]){ int nLevel = 0; scanf("%d", &nLevel); int nPayment = 0; if (nLevel > 100) { nPaym原创 2022-02-14 15:27:11 · 1261 阅读 · 0 评论 -
C语言基础入门48篇_14_逻辑运算符(逻辑与(&&)、逻辑或(||)、逻辑非(感叹号),逻辑运算符的短路特点:&&左为0右不执行、||左为1右不执行)
C语言中的逻辑运算符有&&、||、及!,他们分别被称为逻辑与、逻辑或、逻辑非。前两者是二元运算符,逻辑非是一元运算符。1.逻辑与运算符 `&&`逻辑与运算符的基本语法是:表达式1 && 表达式2其求值的结果规则是:(1)当两个表达式均为非0时,求值结果为1(2)其他情况(只要有至少一个表达式为0),求值结果为0实例:判断一个数字既可以被5整除又可以被7整除#include <stdio.h>int main(int argc,原创 2022-02-14 13:32:04 · 5237 阅读 · 0 评论 -
C语言基础入门48篇_13_关系运算符与关系表达式(等于(==)、不等于(叹=)、大于(>)、小于(<)、小于等于(<=)、大于等于(>=),5==nValue方式避免bug,==不可比较浮点型数据)
C语言中的关系运算符有等于(==)、不等于(!=)、大于(>)、小于(<)、小于等于(<=)、大于等于(>=)。他们可以直接用于整型、浮点基本数据类型及指针类型变量的比较。原创 2022-02-10 15:00:20 · 4519 阅读 · 0 评论 -
C语言基础入门48篇_12_if-else分支结构
1.if语句的基本结构if是分支结构语句,它可以根据条件的不同,执行、或者不执行某个语句(块)。- 对于执行分支只有一行的情况,if语句的基本组成是: if(条件表达式) 条件成立将要执行的语句;#include <stdio.h>int main(int argc, char* argv[]){ int nValue = 0; scanf("%d", &nValue); if (nValue > 100)原创 2022-02-10 13:34:44 · 348 阅读 · 0 评论 -
C语言基础入门48篇_11_sizeof运算符(返回数据、变量占用内存字节数,返回程序编译运行的位数是32位(4字节)还是64位(8字节);计算机地址与内存空间的关系)
sizeof是求字节数运算符其基本使用方法是:sizeof(n),n可以为变量本身,也可以为变量类型。sizeof(n)将在编译时被替换为n在内存中占用的字节数。1. 返回各个基本数据类型在内存中的大小#include <stdio.h>int main(int argc, char* argv[]){ printf("sizeof(char):%d\r\n", sizeof(char)); printf("sizeof(short):%d\r\n", size原创 2022-02-09 13:32:33 · 1979 阅读 · 0 评论 -
C语言基础入门48篇_10_算数运算符(加、减、乘、除、取余(奇偶判断及限制数字范围)、自增(++n/n++)、自减(--n/n--), / 代表正斜杠)
1.什么是运算符运算符就是运算符号,C语言中的符号分为十大类:赋值运算符算术运算符关系运算符求字节数运算符逻辑运算符位操作运算符条件运算符逗号运算符指针运算符特殊运算符赋值运算符在之前的课程中已经见过,比如:int nValue = 0;nValue = 100;今天将重点学习算数运算符。2.算数运算符算术运算符包括加、减、乘、除、取余、自增、自减7种。2.1 加、减、乘、除在C语言中,分别使用+ - * / (正斜杠)来表示加、减、乘、除运算。#include原创 2022-02-08 13:45:33 · 656 阅读 · 0 评论