C/C++语言拾遗(一)-变量与宏定义

每次翻开C语言的书,都会有新收获。其实,能够实现目的编程方法有很多,我们总是以最笨最繁琐的方法开始入手,然后随着理解的深入,笨方法逐渐淘汰,新的方法思路会使我们的程序更缜密精巧。因此不拘泥于现在,不断学习,才能让我们走得更高更远。

1、static 全局变量 和 非static全局变量的区别?

答:C程序可以由多个源文件组成。一个文件中定义全局变量,其他的文件中可以使用extern方式声明后,使用该全局变量。如果希望当前文件中的全局变量不能被其他文件使用,可以在全局变量的定义前加上关键字static,这样该全局变量就是一个static全局变量。​

2、对静态局部变量的说明

​1) 静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储空间,函数调用结束后即释放。

2) 静态局部变量在编译时赋初值,即只赋初值一次;而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。

3) 如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。

3、带参宏定义​

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

这是与函数中的情况不同的。在函数中,形参和实参是两个不同的量,各有自己的作用域,调用时要把实参值赋予形参,进行“值传递”。而在带参宏中,只是符号代换,不存在值传递的问题。​

#define SQ(y) (y)*(y)​

sq=160/SQ(a+1);​

input a number:3

sq=160​

为什么会得这样的结果呢?分析宏调用语句,在宏代换之后变为:

​sq=160/(a+1)*(a+1);​

(宏定义在预编译阶段进行“宏代换”或“宏展开”)​

4、条件编译​

1. 第一种形式:

#ifdef 标识符

程序段1

#else

程序段2

#endif​

2. 第二种形式:

#ifndef 标识符

程序段1

#else

程序段2

#endif​

3. 第三种形式:

#if 常量表达式

程序段1

#else

程序段2

#endif​​

5、二维数组的初始化​

例如对数组a[5][3]:

1) 按行分段赋值可写为:

int a[5][3]={ {80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85} };

2) 按行连续赋值可写为:

int a[5][3]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};​

6、字符数组初始化

char c[]={"C program"};   或去掉{}写为:char c[]="C program";​

用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志'\0'。

指针方式:

char *ps; 赋值   ps="C Language";

而对数组方式:

char st[20]; 不能赋值:st={"C Language"};

而只能对字符数组的各元素逐个赋值。char st[]={"C Language"};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值