初学C语言,全局变量,静态本地变量,宏定义掌握这些就行

#include<stdio.h>
//全局变量 ,,具有全局的生存期和作用域。 
//全局变量只能在main函数前定义。 
int gall = 10;
//像这种把all1的值赋给all2的,首先要保证all1是个恒定的值(编译时刻已知)例如下面:第一组可以正常运行,第二组则不能。 
//全局变量的值如果不加const,是可以被改变的。 
const int all1 = 15;
int all2 = all1;

//int all1=15;
//int all2=all1;


//像这种没做初始化的,会得到0值,指针会得到NULL值。 
int a;			//a=0 
int *p;			//p=NULL


void shi();
int * zhizhen1();
int * zhizhen2();


int main0(){
	printf("gall=%d\t",gall);
	gall += 2; //全局变量可以被改变。 
	printf("gall=%d\t",gall);
	int gall=9; //此时gall的值为9;即如果函数内部存在与全局变量同名的变量,则全局变量被隐藏。 
	printf("gall=%d\t",gall);
		{
			int gall=19;//此时gall的值为9,同理 
			printf("gall=%d\n",gall);
		}
	shi();
	shi();
	shi();
	printf("\n");
	
	//返回本地变量的地址是危险的,
	//返回全局变量后者静态本地变量的地址是安全的, 
	//返回在函数内malloc的内存是安全的,但也容易造成问题 
	//最好的做法是返回传入的指针 
	int *p;
	p=zhizhen1();
	printf("%d\t",*p); //*p=9
	zhizhen2();
	printf("%d\t",*p);//*p=10
	return 0;
}

void shi(){
	//静态本地变量,定义时加上static修饰符。具有全局的生存期但是它的作用域仅限于函数内部。
	static int mp=1; //初始化只在第一次进入函数的时候做 ,以后进入函数时会保持上次离开时的值。 
	printf("mp = %d\t",mp);
	mp += 2;
} 


//返回指针的函数 
int * zhizhen1(){
	int i =9;
	return &i;
}
int * zhizhen2(){
	int y = 10;
	return & y;
}
#include<stdio.h>
//#开头的是预处理指令
//它们不是C语言的成分,但是C语言离不开它们。 
//用#define定义一个宏
//#define <name> <value>
//注意没有分号
//<name> 必须是一个单词<value>可以是任何东西 
#define A 10.0
#define B A     //这种写法是可以的
 
#define PRIN "%d\t" 
#define PR printf("%f\t",A)

#define P printf("%f\t",A);\
		  printf("%f\t",B) 	//如果超过一行可以在行末用 \反斜杠号 
//定义带参数的宏
#define cube(x) ((x)*(x)*(x)) 
 // 下面的两种是错误的、
 //需要遵守一些原则
 //整个值都要带括号,参数出现的每个地方都要带括号 
#define a1(x) (x*123) //为什么会错 原因是 a1(5+1)    ( 5+1*123)
#define a2(x) (x)*123 				//    180/a2(1)	 (180/1*123)
									//结果并不是我们想的 

//正确的写法
#define a3(x) ((x)*123)
int main(){
	printf("%f\t",A);
	printf(PRIN,A);
	PR;
	P;
	printf("%d",cube(5+1));
	return 0;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值