文章目录
-
- 全局变量与局部变量
- 常量
- 字符与字符串
- 转义字符
- 操作符
- 关键字
- 小结
全局变量与局部变量
全局与局部变量的区别在于其作用域(即变量能够被使用的范围)或者也叫生命周期。
局部变量的作用域(或生命周期)在定义该变量的{}内,离开该{}会自动销毁,但是如果使用static这个关键字,情况就有所不同。(这个我会在关键字这个模块详细讲解)
全局变量,定义于{}之外,故名思义,作用于整个程序,它的生命周期是程序的生命周期,作用域也是整个程序作用域(注意:当我们在使用全局变量与局部变量时,如果两个变量名字相同,局部变量优先)
例如
int a=10;
#include<stdio.h>
int main()
{
int a=2;
printf("%d",a);
return 0;
} //此程序数输出的结果是2而非10.采用的就是局部优先的原则
全局变量也有(extern关键字的类型)即声明外部的文件中的符号,这个会在后面的关键字中于static有奇妙的反应。
常量
常量包括字面常量,const修饰的常变量,#define定义的标识符常量以及枚举常量这四类。
字面常量与枚举常量这里不多介绍。
const修饰的常变量: 例如 :const int a=10; 将本为变量的a定义为具有常量属性的常变量,其本质仍为变量,可是结果不允许改变。
#define 变量名 赋值
例如: #define max 100 或者 #define str "hello" 以上分别定义了一个整型和字符串类型的标识符常量,可以在{}内进行直接使用。
例如;
#define str "hello"
int main()
{
printf("%s",str);
return 0;
} //输出结果就是hello.
字符与字符串
//c语言没有关于字符串类型的
字符:
例如:char a='e';
//char是描述字符类型
//其中a是字符变量,e是字符常量
字符串:
例如:char a[]="abcde";
//字符串是利用字符数组进行存储。
//字符串在其有效长度后会自动添加'\0'作为结束符,所以字符串的长度会格外+1;
注意区分以下两个的区别
char str1[ ]="abc"; //长度为4
char str2[ ]={'a','b','c'}; //长度不一定为3,这些在运用strlen函数时会体现。
同时
printf("%s\n",str1); //输出为abc
printf("%s\n",str2); //输出不一定为abc,同上。理由是我们c语言读入或者输出遇见'\0'会停止,但我定义的这个str2后面不会自动生成'\0',所以它会继续进行直到遇见'\0'为止。
转义字符
这里只介绍\ddd和\xdd。
1.\ddd
ddd表示1-3个八进制数,如:\134
思考以下结果:
printf("%c\n",'\134'); //将八进制的134转化为十进制数,再ASCII码表找十进制数对应的字符即是结果。
2.\xdd
dd表示十六进制数,如:\54
printf("%c\n",'\54'); //计算方法同上
操作符和关键字
操作符(只讲一些)
1.sizeof
sizeof是计算变量所占空间大小,计算单位是字节,例如int 类型占4个字节,double占8个字节。
当然,sizeof有计算数组元素的作用
例如:
int a[ ]={1,2,3,4,6,7,8};
int number=sizeof(a)/sizeof(a[1]);
2.条件操作符(三目操作符)
exp1 ? exp2 : exp3;
例;
int a=20,b=10;
int r={a>b ? a : b}; // r的结果为20。
原理:
如果exp1为真,执行exp2,并且输出exp2的结果。
如果exp1为假,执行exp3,并且输出exp3的结果。
3.逗号表达式
exp1,exp2,exp3,exp4....
// 依从从左往右计算,输出结果为最后一个表达式的值。
关键字(只讲一部分)
1.typedf 变量重命名 //只针对类型
例如:
unsigned int squ=0;
我可以用 typedf unsigned int uint //用uint表示unsigned int
这样做方便 定义函数。
2.static 修饰变量和函数
一.修饰局部变量(重点)
例:
#include<stdio.h>
void run()
{
static int a=1; //易错点:static产生的a不会随着run函数执行完后自动销毁,它会 执行到整个程序结束为止。
a++;
printf("%d",a);
}
int main()
{
int i=0;
while(i<4){
i++;
run();
}
return 0; //结果为2,3,4,5
}
上面我们可以理解为 static这个关键字修饰局部变量的时候,局部变量的存储位置发生了改变,原本应该存放在栈区的局部变量,被转变到的静态区,作用域发生了改变,不会在出原本的作用域时被自动销毁。所以 a 的值也不会重新变为1.
二.修饰全局变量(对于定义在{ }之外的变量)
包括:1.extern //声明的外部符号
2.在外部符号前加上 static.
例如:
#include<stdio.h>
// int a=10; a为全局变量
static int a=10;// 相比之下,a的属性发生变化。
int main()
{
printf("%d",a);
return 0;
}
当然,在另外一个文件如果定义了 a,我们引用会采用 extern 来引进变量。
extern int a;
但是如果前面加上static(是指原本定义的全局变量被static了,如上)
程序会报错。
原因是static 改变了全局变量的外部链接属性,将其转变为内部链接属性,无法在其他源文件.c中使用,其实函数的extern 也同上述一样.
使用 static 是保证变量的安全性。
小结
以上就是我两天的学习c语言的相关成果,如果有任何不对的地方,请大家留言指正,万分感谢!