Day16

思维导图:

使用递归实现斐波那契数列

1 1 2 3 5 8.....

countx=8

str1字符串长度大于str0导致str1中字符串拷贝不进str0会出现段错误或者随机值。并且第二题写法有问题str0[10]只能在此封装函数中使用,超出就自动释放内存,没有输出这种写法没有任何意义。

数组的地址不可改变,指针指向的地址可以改变。

数组的字节大小与元素个数和数据类型有关,指针字节大小位8

全局变量

static全局变量:其作用域被限制在定义该变量的源文件内,即只能被该文件中的函数所访问和共用。这种限制可以避免在其他源文件中因同名全局变量引起的错误,提高了程序的模块化和封装性。

普通全局变量:其作用域是整个程序,即在一个源程序由多个源文件组成时,普通全局变量在各个源文件中都是有效的。如果一个源文件中定义了普通全局变量,其他源文件只需使用extern关键字进行引用即可访问。

局部变量

static局部变量:在编译阶段(即函数还未执行之前),static局部变量的空间就已经被分配。这意味着,即使函数还没有被调用,static局部变量的存储空间也已经存在。static局部变量的生存期贯穿整个程序的运行期间。即使函数执行完毕,static局部变量的存储空间也不会被释放,直到整个程序结束。如果static局部变量没有被显式初始化,编译器会自动将其初始化为0(对于数值型变量)或空字符(对于字符型变量)。并且,static局部变量的初始化语句只在第一次执行时有效,但后续可以被多次赋值。

普通局部变量:只有当程序执行到该局部变量的定义语句时,才会为其分配存储空间。也就是说,普通局部变量的存储空间是在运行时动态分配的。普通局部变量的生存期是从函数被调用的时刻开始,到函数返回调用处的时刻结束。一旦函数执行完毕,其定义的局部变量就会被自动销毁,存储空间也随之释放。如果普通局部变量没有被显式初始化,其值将是未定义的(通常是随机值)。每次函数被调用时,如果定义了新的局部变量,它都将被重新初始化(如果提供了初始化语句)或保持未定义状态(如果没有提供初始化语句)。

函数

static函数的作用域被限制在定义它的源文件内部。这意味着,该函数只能被其所在源文件中的其他函数或代码段调用,而不能被其他源文件中的代码所访问。这种限制有助于减少函数之间的耦合度,提高程序的模块化和封装性。static函数具有内部链接性(internal linkage)。这意味着,在编译时,编译器会为每个源文件中的static函数生成独立的代码段,这些代码段之间不会相互干扰。因此,不同源文件中的同名static函数实际上是独立的函数,它们之间不会发生命名冲突。static函数在内存中的存储方式与普通函数类似,但由于其作用域和链接性的限制,它们通常只在定义它们的源文件内部生成代码段。然而,需要注意的是,这里的“存储方式”更多是指函数代码在内存中的布局和访问方式,而不是指函数本身的存储位置(因为函数代码通常存储在只读数据段中)。

普通函数默认情况下具有全局作用域(如果它们是在全局或命名空间作用域中声明的)。这意味着,只要包含了函数声明的头文件,该函数就可以被程序中的其他部分调用,无论这些部分位于哪个源文件中。普通函数默认情况下具有外部链接性(external linkage)。这意味着,编译器会尝试在整个程序中为该函数生成唯一的代码段,以便在需要时调用。如果不同源文件中的函数具有相同的名称和签名,并且没有使用static关键字进行修饰,那么编译器会将其视为同一个函数,并可能导致链接错误。普通函数同样存储在只读数据段中,但由于它们具有外部链接性,因此其代码段在整个程序中是唯一的,并且可以被多个源文件共享。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yupeizhou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值