C语言知识总结理解

本文介绍了C语言中的宏定义、字符类型、全局和静态变量的概念,讨论了作用域与生命周期的区别,枚举的用法,指针的基础知识,预处理指令,以及unsigned和signed整型溢出,还涵盖了extern的用法和return关键字的多用途实例。
摘要由CSDN通过智能技术生成

1:宏定义不加分号

#define  ZYY   1;

#define ZYY 1 

记住啊,宏定义后面没有‘;’

2:char类型变量既可以存放字符型常量又可以存放整形常量

because:

在 C 语言中,char类型用于存储字符(character),如英文字母或标点符号。严格来说,char也是整数类型(integer type),因为char类型存储的实际上是整数,而不是字符。计算机使用特定的整数编码来表示特定的字符。

因此,char类型既可以存储字符型常量,又可以存储整数型常量。

存储字符型常量:

char c=‘A’;

存储整型常量:

char c=65;

3:关于全局变量和静态变量

芯片中的内存区域分为栈区、堆区、全局/静态存储区、常量存取区、代码区和寄存器区。

本文对全局/静态存储区进行总结。

全局变量以及static修饰的静态变量都存储在这个区域,由于同属于一片区域,所以其性质是一样的,那他们有什么性质呢?其实就是系统给全局变量和static修饰的静态变量在其生命周期的这段时间分配了固定的内存,每次程序需要用到该变量的时候,程序就会该内存地址调用该变量(类似于指针)。

extern修饰全局变量时它可以扩展全局变量的作用域。比如说在1.c中定义了一个全局变量a,在2.c文件中用extern对a变量进行声明,那么全局变量a的作用域就成了1.c文件和2.c文件。并且当1.c中的函数改变a的值时,2.c再调用a时为a修改过的值。

4:作用域与生命周期

先上链接:作用域和生命周期_作用域与生命周期-CSDN博客

作用域:指的是一段范围,如果非要在这个范围前加个定语的话,我希望是代码。针对编译和链接过程。

生命周期:说白了,我的理解是标识符具有存储空间的一段时间段。此阶段针对的是程序的执行过程。

其实我个人觉得这两个概念中会存在某种联系,也可能是现在造诣太浅会这么理解。作用域就是我们在编写代码的时候会考虑的东西,生命周期是我们编写完代码,执行代码的时候要考虑的东西。

5:枚举

上链接:C语言枚举详解-CSDN博客

主要有以下几点吧:

第一,枚举就是特殊的宏定义,用来定义一些有联系的符号。

第二,首先进行的是类型定义,定义一种类型,就像int,char一样。然后进行变量的声明,根据你所创建的枚举变量类型来声明变量,就像int a一样。最后是定义变量就像int a;a=1;或者int a=1;一样。枚举变量只能接收枚举类型中定义好的符号值。

6:指针

【C语言】深入理解二级指针_c语言二级指针-CSDN博客

让你不再害怕指针——C指针详解(经典,非常详细)-CSDN博客

先上两个链接吧,还没咋用到指针,所以现在对指针的理解也比较浅薄

目前总结俩点

①分清指针类型、指针所指向的类型、指针的值和指针本身所占据的内存区域。

②数组名本省也是指针,表示该数组的第一个数的起始地址。比如制作了一个函数void mmm(int *p) 再用它的时候,就可以直接mmm(str)    int str[];

③函数名即代表函数的首地址。

④函数指针:其本质是一个指针变量,该指针指向这个函数。函数指针就是指向函数的指针。 

        声明格式:类型说明符 (*函数名)(参数)

        在函数声明的基础上加了个(*)参考函数指针和指针函数用法和区别-CSDN博客

7:预处理的个人理解

常见的预处理包含:文件包含、条件编译、宏替换、布局控制。 都是#开头

前边三个经常用,布局控制目前还没用到,等用到了再来叭叭。

条件编译,就是在编译器根据预处理命令和条件来判断那一部分编译,哪一部分不编译。

8.unsigned 和signed整形溢出

 在做例程的时候遇到了溢出的问题,unsigned如果向下溢出变成最大值。signed不同编译器有不同的处理方式

9.extern 的用法

深入理解extern用法-CSDN博客

10.return

return的四种用法_return跳出函数-CSDN博客

这个印象比较深了,return的作用是跳出函数。所以一个函数中可以包含多个return。但是只会返回一个值。

11.回调函数

 回调函数是一个通过函数指针调用的函数。建立函数、建立函数指针、建立将函数指针作为输入变量的函数。

回调函数是建立函数。

回调函数的出现,使得函数可以作为函数的输入参数,增加了编程的灵活性。

参考C++回调函数的基本理解和使用-CSDN博客

12 .qsort函数

比较重要的是参数中的最后一个函数指针值,通过此,了解了函数指针,回调函数,void*的用法,只是就是这样,可以由一个点牵出来一整条线。

C语言中的qsort函数(详解)_c语言中qsort函数-CSDN博客

【C语言】qsort()函数详解:能给万物排序的神奇函数-CSDN博客 这个参考比较复杂详细,还没有仔细看完,有时间有机会来看

13.C语言中void*详解及应用

void在形容参数或者返回值时,表示是空,既没有。而当void用来形容指针的时候,void指针可以指向任意类型的数据,就是说可以用任意类型的指针对void指针赋值。即可以将 void*p中的void看成任何对于参数形容的关键字。

C 语言中 void* 详解及应用 | 菜鸟教程 (runoob.com)

14. C语言中const关键字的用法

常量指针是指指向的内容是常量。1 不能通过这个指针改变变量的值,但是可以通过其他引用来改变变量的值;2 常量指针指向的值不能改变,但是这并不意味着指针本身不能改变。

其实要明白一个道理,const是constant的缩写,const就是把一个函数变量或者其他变成常量,挨着谁近,修饰的就是谁。

C语言中const关键字的用法-CSDN博客

15.用typedef定义结构体

typedef struct Person
{
    char name[16];
    int age;
}per;

用typedef定义结构体struct Person之后,再给struct Person取一个外号,就叫做per,之后可以用它的名字或者外号声明结构体变量。它的名字和外号就变成了结构体关键字(同int char等关键字一个意思)。之后便可以用此结构体关键字去声明结构体变量。

【C语言】结构体类型的定义与使用_c语言结构体定义和使用-CSDN博客

这就是结构体变量和普通变量声明的不同之处,结构体变量需要先定义结构体关键字,然后再用结构体关键字去声明结构体变量,而普通变量本来就有已经设置好的变量关键字,直接使用声明变量即可。

16.布尔表达式

要明白布尔表达式,首先要知道布尔量,之前也一直遇到布尔量,但是没有明明白白的查资料并且总结过,在这里总结一下。

布尔量是用于表示两种可能状态的变量:真(true)-1;假(false)-0。

布尔表达式就是运算结果为布尔量的表达式,比如说:条件判断、与或非运算等等。

17.断言

看百度的解释,其实说白了,在编程中,断言就是判断某个条件是否成立,如果成立,执行什么什么操作。

一些简单的小概念,不弄明白就总心里刺挠。

18.三元运算符

三元运算符_百度百科 (baidu.com)

19.tolower函数

tolower_百度百科 (baidu.com)

20.strlen函数

strlen(C/C++语言函数)_百度百科 (baidu.com)

计算给定字符串的长度,字符串的结束标识符是'\0',计算‘\0'之前的字符串数,说这么多其实就是计算字符串中有几个字符。

想起sizeof了,下边写一些。

  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值