C语言笔记总结汇总_01_bool&数组&内存四区&全局变量&static&宏

bool类型的量

void main()
{
	bool a = 0;
	a = -1;
	printf("%d\n", a);
	system("pause");
	return ;
}

结果:

结论:真有千千万,而假只有一种。(简单来说bool类型的变量只有给它赋值为0它才为0负责都为1)。

那么bool flag=随机值 flag的结果是1,因为随机值是非0的值。

 

数组

数组存在的意义就是为了查表。

所谓的C语言的内存四区:

  1. 代码区 .text
  2. 栈区 .stack
  3. 堆区.heap
  4. 数据区.data
     

 

俩个凡是:

  • 凡是在函数之外定义的变量都在数据区。(等价于全局区,但是我们这里一般说成数据区)
  • 凡是在函数内部定义的变量都是局部变量
     

 

一个关于全局变量的例子

int a=0;
int main()
{
	static int ar[13]={29,31,..........}	;
}
int b=0;

上面的代码可以通过编译,原因是全局变量和main函数的位置无关。

static在C语言中的作用

static(防止重复出现栈空间)

void fun()
{
	int a=10;
	static int b=20;
	printf("%d %d\n",a,b)
}//(函数要挂了,static 修饰的变量不挂);  static 修饰的变量在 .data区。

可以防止多次调用函数时,大量不变的数据被多次初始化(例如我们返回每个月份的天数的时候,int Days[13]={29,31,28,30,31,30,31,31,31,30,31,30,31}如果每次都在函数中执行该语句将会浪费大量的时间和空间。),浪费时间和空间(我们程序解决的问题就是要在尽可能的节省时间或者空间)所以说如果不用static修饰则会浪费资源,这样是不能被接受的。

例如我们在函数中查表得时候,由于每次调用函数得时候查表,数组中的内容无变化,但是每次都要在栈空间上申请那些没有变化的值是没有意义的。所有我们这时候便可以用static修饰使得为那些我们需要它不被多次浪费资源的变量“延寿”。

 

宏:本质就是替换的概念,该操作发生在预编译阶段,不检查类型。

 

1,#define int int* (正常来说我们不可以这么做,但是凡是带“#”开头的语句,全部发生在预编译阶段,这个阶段不做变量检查,只做替换的操作,所以这样的语句可以通过编译。)

2,

void main()
{
	int arr[] = {
#include "number.txt"
	};
	int n = sizeof(arr)/sizeof(arr[0]);
	for (int i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
	system("pause");
	return ;
}
//file:number.txt
1,2,3,4,5,6,7,8,9

结果:

结论:可以知道#include 进来的头文件就是将文件的内存插入程序中来。

打开预处理生成的.i文件可以看到

...
void main()
{
	int arr[] = {
#line 1 "c:\\users\\goingjack\\desktop\\dailytraining\\dailytraining\\number.txt"
1,2,3,4,5,6,7,8,9
#line 10 "c:\\users\\goingjack\\desktop\\dailytraining\\dailytraining\\bool.cpp"
	};
	int n = sizeof(arr)/sizeof(arr[0]);
	for (int i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
	system("pause");
	return ;
}
...

3,

#define  MAX(a,b)    ( (a)> (b) ? (a): (b))

//宏a,具有一定范性能力    替换没有类型。b,副作用 MAX(++y,z) ===> (++y)>(z)?(++y):(z)    y加了俩次。

(int max_int(int a, int b) { return a > b ? a : b; }//函数不具有副作用)   

三种方法定义常量:

#define MAX 1024===》1,发生在预处理阶段,实质上相当于做了替换操作 。2,不占用内存大小。3,不做类型检查

const int n=1024          1,发生在编译阶段。 2,要做类型检查。3,占有内存 。4,修饰的变量具有只读属性无法进行修改。

enum{len=1024};1,枚举常量属于常量占用内存大小。2,枚举常量具有类型,具有于普通变量相同的诸如作用域、值等性质。

3,枚举可以限制函数某个参数的输入。4,枚举可以一次定义大量相关的常量,而宏只能定义一个。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值