我的编程经历(4)

文章详细解释了C语言中static关键字的作用,包括如何改变局部变量的生命周期和全局变量的外部链接属性。此外,还讨论了#define用于定义常量和宏的区别,以及指针的概念和用途,指出指针是内存地址的变量。最后,介绍了结构体作为描述复杂对象的工具及其成员访问操作符的使用。
摘要由CSDN通过智能技术生成

接着上文,废话不多,直接开始复盘:

1.关键字static。用于修饰局部变量、全局变量以及函数。

修饰局部变量时的作用,可举例说明:

 此代码的运行逻辑中,每当a小于10,则会进入循环。在test中由于int b = 1 是局部变量,在输出后其生命周期即结束。因此,每进入一次循环,b都会在一的基础上加一,得到的结果就会是10个2。

但如果将int b = 1用static进行修饰,其运行结果如下图:

由于被static修饰,变量b不会因为其作用域的结束而结束其生命周期,会依然保留。因此,在程序二次进入循环时,其对应的值就会在上一次循环所得值的基础上再次加一,以此类推,从而得到这样的结果

顺带一提,将局部变量以static修饰后实际上是改变了其存储类型。而内存大致可分为三个区:

栈区----存放局部变量,函数的形式参数等临时变量

堆区----动态内存分配

静态区----静态常量,全局变量

而存储在静态区的变量,即使出了范围也不会进行销毁,因此被static修饰的局部变量也不会销毁。但要注意,虽然局部变量生命周期因为static的修饰而改变,但其作用域是不会发生变化的。

总结:static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。

修饰全局变量和修饰函数极其类似。全局变量是作用于整个程序或者整个文件的。

 如图所示,变量c = 5 在两个项目中都是有效的。如果将其以static修饰的话,变量c就只作用于cc.c这个项目中,就不作用于另一个项目。因为static修饰全局变量或者函数时修改其外部连接属性为内部连接属性,这时只能在本源.c文件中使用。

总结:一个全局变量或者一个函数被static修饰,使得这个全局变量或者这个函数只能在本源文件中使用,不能在其他源文件内使用。

2.#define定义常量和宏

当define定义常量时如图所示

此时M所代表的就是100,这个代码底层的工作逻辑实际上是先将M替换为100再进行打印,私以为这个跟定义变量有异曲同工之处。

当define定义宏时如图所示

这个代码的底层工作逻辑实际上是将ADD(a, b)替换为a + b,再进行运算。这个和函数有着相似之处,但二者还是有区别且各有优劣,只不过在先今简单阶段暂时体现不出来罢了。

3.指针。

要了解指针,就要先了解一下内存的运行机制。所谓内存其实就是将一整块的空间划分为不同区域,然后再将每一个区域标上编号,或者地址。举个简单的例子,我们平常去图书馆借书时我们就得先查询书的位置,再去找书。内存也是如此,我们要在内存中使用什么,就得按照编号或者地址去寻找,而存放的编号即为地址,也被称为指针。

内存被划分为若干个小部分,每个部分都有着其对应的编号,同时每一小个部分大小都是一样的,都是一个字节。

举例说明:

int main()

{

int a = 10; 这意味着,在内存中开辟了一个区域用来存放10,而这块区域被命名为a

int * b = &a;这意思是,在内存中开辟了一个区域用来存放a区域的地址代码,这个区域命名为b。                        因此,若此时将b进行打印显示的就是一串地址代码符,这个代码符指向的位置就是a                        所在的位置,b就为指针变量。而* b就表示a所在的那一片区域,因此:

* b = 20,则 a = 20。如图所示

注意一点,%p是指按十六进制输出。

总结:内存会被划分为小的内存单元,一个内存单元的大小是一个字节;

            每个内存单元都有编号,这个编号也被称为地址或指针;

            地址或指针就可以存放在一个变量中,这个变量被称为指针变量;

            通过指针变量中存储的地址,就能找到指针指向的空间;

            指针变量是用来存放地址的一种变量;

3.结构体。用于描述复杂对象。当一个对象有多个元素时,以struct修饰,如下图所示

 值得注意的地方在于符号"->",与符号"."都为结构成员访问操作符。区别在于前者左边为结构体指针,后者左边时结构体的变量。另注意顶部,对于scanf操作,有时候系统会出现报错,可将顶部保留以防止报错。

复盘完毕。

遗留问题:

1.在上图输入中,为何age需要取地址?

2.void是函数的返回类型,具体是指的返回什么,我并没有理解到;

3.char name中为什么要加方括号?是数组的意思?

另还有一个问题,一直遗留未解决。

----------------------------最后编辑于2023.2.12下午五点左右

             

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值