1.常量与变量的区别
相信初学C语言的学者估计都会以为c中的常量与变量是非常好理解的问题,但是随着他们学习深度的加深,他们会发现其实常量和变量在c中并不是一个号欺负的小弟弟,下面我就把我自己所理解的常量与变量和大家做一个谈论
才疏学浅,有说的不对的地方希望和同学们一起交流。
首先变量顾名思义就是在其作用域内可以被改变的量,就像是变形金刚一样,我变个型容易吗,不发出点动静估计你们是以为我犯羊癫疯了呢,所以变量在“变”之前都会申明,老子要变形了。而常量就不同了,常量就像是一块顽固不化的石头,不“吃”(定义)不“喝”(初始化),但是狗急跳墙做“武器”的时候(引用)依旧是那么的直接,所以常量就是可以不被定义,不初始化可以直接引用的量,那我估计有的人会问为什么常量这个老石头会狗急跳墙呢,那是因为有的人非要去“打开”它(写和赋值)。所以看到常量我们就访问和读就好。下面举个例子:
char *str = "hello world" ;
printf("%s\n",str);
*str = "goodbye world" ;
printf("%s\n",str);
这是一段有问题的代码,那么问题出在哪里了呢,有两点问题,第一str在第一行被定义为一个字符型的指针变量,我们暂且不管赋值有没有问题,暂且当做没有问题,第一行把“hello world”这个常量赋值给了str,好没问题,但是你为什么在第三行又把“goodbye world”这个常量赋值给str呢,现在的str已经代表了一个常量“hello world”,上面我们说了,常量是不可以被复制的,那么你第三步把"goodbye world"赋值给常量“hello world”是几个意思呢,错的意思!这段代码很好地说明了常量与变量的区别,其实这段代码不止一个错误,还有一个更大的错误,先买个官司。后面我在和你们慢慢道来。
2.局部变量与全局变量
局部变量就像是一个国家的公民,你可以在你的国家里活动,但是一旦你越过了国界,你就会付出死亡的代价(失效),而全局变量就不一样,它们是属于有特权的公民,这里的特权还分两种,下面我举例说明
int a,b /*外部变量
void f1 () /*f1函数
{
...
}
float x,y; /*外部变量
int fz() /*fz函数
{
...
}
int main() /*主函数
{
...
}
在这个函数中a b变量是外部变量而且是在所有函数之前定义的(f1 fz main)所以他就是有着三个函数的国籍,随便进出,但是外部变量x y就不一样了,它们虽然在fz和main函数之前被定义但是在f1函数之后,所以它们只有fz和main这两个函数的国籍,对于f1函数就只有护照,要申明了才能进入(extern)。
综上所述全局变量只有在函数内经过说明才能使用,说明符为extern,但是一个函数之前定义的全局变量,在该函数内就不用说明了。
3.枚举与#define宏的区别
(1)#define宏常量是在预编译阶段进行简单的替换,枚举常量则是在编译的时候确定其值得。
(2)一般在编译器里,可以调试枚举常量,但是不能调试宏常量。
(3)枚举可以一次定义大量相关的变量,而#define宏一次只能定义一个。
4.对于++i与i++的区别
++是先加后出 i++是先出后加,例如
i=3;i++;++i ; i++
第一个i是先出所以出来结果还是i,第二个i是在4的基础上再加1所以出来5,最后一个还是先出i为5
5.条件运算符的运算
条件运算符为?和:,它是一个三目录的运算符,即有三个参与运算的量。由条件运算符组成的条件表达式一般形式为:表达式1?表达式2:表达式3,例如(a>b)?a:b,如果a大于b那么就输出a,否则输出b。