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

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

#include
//全局变量 ,,具有全局的生存期和作用域。


//全局变量只能在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
//#开头的是预处理指令
//它们不是C语言的成分,但是C语言离不开它们。


//用#define定义一个宏 //#define //注意没有分号 // 必须是一个单词可以是任何东西 #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; }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/563955.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-03
下一篇 2022-04-03

发表评论

登录后才能评论

评论列表(0条)

保存