【从零开始的C语言】初识 (初阶) 第四天

浅谈 scanf中的 EOF(文件结束的标志) End Of File

在scanf函数中,scanf读取失败的时候,它会返回一个-1 即EOF;读取成功的时候,它会返回读取到的数据的个数。常用于在线oj题目的多组输入。

关键字初识 (部分)

register (寄存器) :寄存器是集成在CPU上的一个区域,其存储数据的速度特别快。

int main(){
	register int a=10;  //建议编译器将变量a放入寄存器当中
	return 0;
}

typedef (重命名,给变量起别名)

typedef unsigned int uint;
int main(){
	uint a;  //变量a即为unsigned int类型
	return 0;
}

static(静态的)

可用来:1、修饰局部变量
2、修饰全局变量
3、修饰函数

void test(){
	int a=0;          //不用static修饰
	a++;
	printf(%d\n”,a);
}
int main(){
	int i = 0;
	while(i<10){
		test();    //只打印1
		i++;
	}
	return 0;}

再看下列代码:

void test(){
	static int a=0;  //static修饰a
	a++;
	printf(%d\n”,a);
}
int main(){
	int i=0;
	while(i<10){
		test();    //打印了1到10的所有数字
		i++;
	}
	return 0;
}

这里最好从内存的层面上去理解:
在这里插入图片描述
对于存储在栈区的数据,其在进入作用域时创建,出了作用域就被释放;而放在静态区的数据,直到程序结束的时候才被释放。则对于被static修饰的局部变量来说,其一开始被创建在静态区里,满足直到程序结束才释放,其值可以被更改,当我们使用一个局部变量,使如果用完时不想让他被内存释放,或者要更新它的值之后还要继续使用,则需要用static关键字修饰该局部变量。注意,它依旧是个局部变量,其生命周期没有变。
对于static修饰的全局变量和函数,它们两特点相似,只做解释不做代码验证了:全局变量和函数都是具有外部链接属性的,可以被非源文件的其他文件调用。但当其被static关键字修饰的时候,其外部链接属性被限制成了内部链接属性,即只能在它当前的源文件中被调用,其他源文件无法调用被static修饰的全局变量和函数。说白了,就是限制了他们的作用域。

define(定义常量和宏)

可用来定义符号和宏,对于符号不做过多详解,对于宏,坐如下研究:

#define M 100      //定义符号常量
#define MAX(x,y) (x > y ? x : y)  // 宏 ,与函数类似,但有区别,如函数有返回值,而宏没有.
int main(){
	int a=10;
	int b=20;
	int m = MAX(a,b);  //即为 int m=(a > b ?a : b);
	return 0;
}

宏只用来定义简单的逻辑判断,复杂的逻辑判断还是要用函数

C语言最具特色的 指针 (初识)

首先要理解内存,以及数据在内存当中的地址,这里不做描述因为已经有所理解了。直接对指针进行理解与描述。内存单元的编号=指针=地址
先看如下代码:

int main(){
	int a=0;
	printf(%p”,&a);//打印地址、指针用%p格式化
	//a是整型,在内存当中占4个字节,但这里打印的时候,只打印了a变量在内存当中所占四个字节当中的第一个字节的地址
	return 0;
}

在定义指针指向地址时,定义的指针的类型必须要和它指向的数据的数据类型相同:

int main(){
	int a=10;
	int *pa=&a; // 正确,a为int类型,pa也要为int型
	float *pb=&a; // 错误,指针的类型和它所指向的数据的类型不匹配
	return 0;
}

通过*(解引用)操作符可以取到指针指向地址中所存储的值:

int main()
{
	int a=10;
	int *pa=&a;
	printf(%d”,*pa);  //打印10
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值