学习目标:了解字符字符串 ,转义字符等
一,变量的作用范围和生命周期
变量分全局变量与局部变量,作用范围不一样。例:
//在这里添加全局变量 int a=100;即可 int a = 100; int main() { { int a = 100;//作用范围只在该范围内 } printf("%d", a);//在这里是未被定义的变量 return 0; }
这里的a若未定义全局变量,则是未被定义变量,括号里的int a=100作用范围只在括号内,无法被下面的printf函数使用,若定义全局变量则可以使用。
注意,定义的全局变量可以在该文件里的其c源文件里使用,不过需要声明,如这里的a
/声明一下来自外部的全局变量
我们在其他源文件里定义一个int a=1000;则有
extern int a; int main() { printf("%d",a); return 0; }
在这里全局变量在整个工程里都可以使用。
生命周期
生命周期指的是变量的创建和销毁的一个时间段,例如:
int main() { { int a = 10;//创建的局部变量只在该范围内使用,创建就会占用空间。但在区域外,生命周期就结束了,无法在外部使用。 } printf("a=%d\n", a); return 0; } int a = 1000;//对应的全局变量的整个生命周期是整个工程
这里的a对应的区域的生命周期就可以表示。
常量
c语言的常量有以下分类
字面常量
int main( { 3.14;//浮点型常量 55;//整型常量 'a';//字符常量 return 0; }
const修饰的常量
int main() { const int num=10;//coonst修饰 ,无法修改,具有了常量属性。 printf("%d\n", num );//10 num=20; printf("%d\n",num);//不可以改为20 return 0; }
int main() { int a=10; int arr[a]={0};这里的a不是常量值,可修改。即使const修饰了也不行,在编译器看来还是个变量。 return 0; }
这里需要注意一下const修饰的是一个变量,虽然无法改变,但编译器认为他是一个变量。比可以用来表示数组大小。
#define定义的标识常量
#define mmax 100 int main() { max=200;无法修改 printf("%d",max);//100 return 0; }
define定义的是常量,不是变量。
枚举常量
所谓枚举即一一列举,是一种算法。他的枚举里的元素是一个常量。例如:
enum Sex//枚举一个性别 { male,//男 female,//女 secure//保密 }; int main() { int age; enum Sex sex = male;//用这个类型创建了一个变量sex,赋值为male. 此时枚举的元素无法被改变 return 0; }
字符串,转义字符
字符, 由一对单引号引起来的都是字符如'a' 'v'。
字符串 "oajoahjoh"由多个字符组成,并由一对双引号引起来。
注意:字符串的结束标志是一个叫做\0的的转义字符,不算做字符串内容
打印字符用%c 例:
int main() { char ch = 'a'; char arr[] = "abcdef";//这里创建一个字符数组用来存放字符串。 char arr1[] = { 'a','b','c','d' };//这里再创建一个字符数组,区别是这里是没有\0的,就是四个字符abcd. //这里的\0具有重要作用 //如果打印 printf("%s\n", arr);//结果abcdef printf("%s\n", arr1);//结果abcd乱码 //\0是结束标志,arr正确打印,而arr1这里打印完abcd后无结束标志,后继续打印直到遇到\0;而这里是随机值 //这里的函数strlen 也是依靠\0的, return 0; }
在这里需要注意的是字符串,字符串可以直接放数组里储存起来,复制直接是双引号引起的一串字符,这里的字符串拥有\0的结束标志,字符串也可以是一个个字符储存到数组里,这里的字符串是没有以\0为结束标志的,运用函数对字符串时,是需要有\0的字符串,否则函数无法判断其字符串截至到哪里。
转义字符
由\加上特殊字符组成的,其本身意义发生了改变。例:
int main() { printf("abcndef"); printf("abc\ndef");//\n转义字符,作用是换行 //\+字符是转义字符。转义的字符是固定的,共有 } //三字母词 int main() { printf("(are you ok??)"); //结果(are you ok] //旧的编译器会把??)识别成一个字符串,转换成]; //不希望这样的打印,加\,给他转义,他不会识别为三字母词 printf("%c\n", '\'');//打印单引号 printf("%s\n", "\"");//打印双引号 printf("c:\\test\\test.c");//打印路径,把转义字符转义变成字符 //c:\test\test.c //\a产生蜂鸣声 printf("\a"); //重点说下\ddd \xdd //ddd代表可以是一到三个八进制数 printf("%c", '\130');//结果为x //因为130八进制转换为十进制为88,88对应的ASCLL码值就是x。具体见ASCLL码表 //\xdd代表两个16进制数 printf("%c", '\x35');//结果为0 //35的十六进制转换成十进制为53,对应的ascll码为0; //但ASCll码值是有限的,注意大小 return 0; } //例 int main() { printf("%d\n", strlen("c:\tst\6287\test.c"));//判断字符串长度 return 0;//结果为14 }
注释
在代码中又不需要的的代码可以删除,可以注释掉,在复杂的代码中注释添加说明来理解
注释的内容编译器当不存在,不影响代码。
注释的方式
直接代码后//+注释的内容,只注释//后的内容,换行后无
/*
* 注释内容
* 里面的内容都会被注释
*/
选择语句
一种分支局结构
if语句与switch语句
int main() { int input = 0; printf("你要学习吗,选择1和0"); scanf("%d", &input); if (input == 1) { printf("好好学习天天向上"); } else { printf("感觉不如摆烂"); } return 0; //if else 是一条语句,且有多种结构 }
循环语句
//while语句,DO while语句 for语句
int main() { int line = 0; while (line<=2000)//判断写代码是否有2000行 { printf("敲代码:%d行", line); line++; //添加break语句可以跳出循环 //break; } return 0; }
这里不作详细描述。只是介绍,后面深度学习
函数
c语言函数实现的是一个独立的功能。
如求两个数的和
int main() { int num1 = 0; int num2 = 0; int sum = 0; scanf("%d %d", &num1,&num2); sum=ADD(num1,num2); printf("%d", sum); } int ADD(int x, int y) { int z = x + y; return z; }
这个就是一个简单的函数
构成 函数类型+函数名(函数参数){函数实现的代码段}