【学习笔记】C++每日一记[20240513]

简述静态全局变量的概念

在全局变量前加上static关键字,就定义了一个静态全局变量。通常情况下,静态全局变量的声明和定义放在源文件中,并且不能使用extern关键字将静态全局变量导出,因此静态全局变量的**作用于仅限于定义静态全局变量所在的文件内部。**普通全局变量的作用于是整个工程,在头文件中使用extern关键字声明普通全局变量,并在源文件中定义,其他文件只要使用#include包含声明普通全局变量的头文件,就可以在当前文件中使用普通全局变量。

static int sgn; //首先定义一个静态全局变量,在main函数中赋值
void increaseSG(){sgn++;}

int main(){
	sgn = 10; //表明在main函数中静态全局变量可见
	cout<<sgn<<endl; 
	increaseSG(); //调用increaseSG()函数进行自增操作,表明静态全局变量在函数中也是可见的
	cout<<sgn<<endl;
	getchar();
}

如果在头文件中声明静态全局变量,静态全局变量在声明的同时会被初始化,如果静态全局变量没有显式地初始化则会初始化为默认值,相当于在头文件中同时完成声明和定义,而普通全局变量不能直接定义在头文件中。

sizeof的使用

在C语言中,可以通过sizeof运算符获取其操作数所占内存空间的字节数。需要注意的是,sizeof是一个单目运算符,并不是一个函数。在使用sizeof运算符时,其操作数可以是类型名,也可以是表达式。如果是类型名,则直接获得该类型的字节数;如果是表达式,则先分析表达式结果的类型,再确定所占字节数,而并不对表达式实际进行计算。

int a = 3;
double b = 7.5;
sizeof(int);  //result is 4
sizeof(a);  //result is 4
sizeof(b);  //result is 8
sizeof(a+b);  //result is 8

在这里插入图片描述

虽然对表达式进行sizeof运算时可以不加括号,但推荐使用带括号的书写方式。在实际应用中,很少单独使用sizeof运算符计算某一个类型或表达式所占的字节数,通常使用sizeof运算符都是与内存分配或计算数组长度等需求配合使用。

在申请内存空间时,可以使用sizeof运算符加上类型名作为分配空间的基数。

int *ptr = (int*)malloc(sizeof(int)*20);

在计算数组中元素的个数时,可以使用sizeof运算符加上数组元素类型作为基数。

int count = sizeof(darray)/sizeof(double); 

其中daaray是一个数组名,将数组名作为sizeof运算符的操作符可以获得整个数组所占的空间。如果darray作为实参传递给子函数,子函数中形参对应的参数已经变为指针,而对指针使用sizeof运算符只能获取指针本身所占的字节数。

void main(double darray[])
{
	cout<< sizeof(darray)/sizeof(double) <<endl; //output: 4/8=0
}

int main()
{
	double darray[20];
	cout<< sizeof(darray)/sizeof(double) <<endl; //output: 160/8=20
}

在这里插入图片描述
在这里插入图片描述
注意:不要使用sizeof运算符计算字符串的长度,计算字符串长度应该使用strlen函数。sizeof函数一个运算符,用于获取类型或表达式所占内存的大小;strlen是一个函数,用于计算字符串中字符的个数,其中字符串结束符\0不会被计算在内。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值