详细内容如下
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
1.常见关键字
不能自己创建,关键字不能做变量名(关键字应用实例后期会详细讲,此处只写一部分,重点记录哪些是关键字,哪些不是,是关键字的不要乱用)
// extern 用来申明外部符号 // //#include<stdio.h> //int main() //{
register 寄存器关键字
补充:计算机数据可以存储在:网盘+硬盘+内存+高速缓存+寄存器(造价越高,空间越小,速度越来越快)
计算器在CPU内处理数据,将内存的数据拿过来,内存的数据是从寄存器里拿,内存器在高速缓存拿,等等,所以大量频繁使用的数据应放在寄存器里
// register int num = 100;//建议num存在寄存器里 // // //static----静态的
1.修饰局部变量(没有static时出范围及销毁,static修饰后不会销毁)
// //2.修饰全局变量(作用:该源文件无法在其他源文件中使用)
// //3.修饰函数
//
// //1.修饰局部变量实例
//#include<stdio.h> //int main() //{ // int i = 0; // while (i<10) // { // test(); // i++; // } // return 0; //} //void test() //{ // static int a = 1;//static修饰局部变量,不会销毁,a=2在下次循环时使用,a=1就不再使用,可以想象为此句无效 // a++; // printf("%d ", a);//2 3 4 5 6 7 8 9 10 11 //} //
2.修饰全局变量实例
static修饰全局变量,使之无法被使用
//void App() //{ // printf("%d\n", v_gal); //}
extern声明外部符号,如在一个.c文件定义某一全局变量,需要用extern后即可使用
但是static修饰全局变量,使之无法被使用
//static int v_gal = 0;//static修饰的全局变量,无法被其他源文件(.c)使用
应该在其他的.c文件里,此处为了方便观察,放在此处,原理相同
全局变量,在其他源文件可以使用的本质是具有外部连接属性,但是被static修饰之后,就没有了
//
3.修饰函数,与修饰全局变量使用相同,不再赘述
2.常量和宏
//#define MAX 1000//define定义常量 //#define ADD(X,Y) X+Y//define定义宏,直接替换 //#define Al(A,B) ((A)+(B))//define定义宏,看作整体 //#include<stdio.h> //int main() //{ // printf("%d\n", MAX);//打印结果为1000 // printf("%d\n", 4 * ADD(2, 3));//打印结果为11,因为是替换关系,为4*2+3=11 // printf("%d\n", 4 * Al(2 , 3));//打印结果为20=4*(2+3) // return 0; //}
3.初识指针
每一个数据存储在内存中都是有固定空间的,空间是有标号的,找到标号,就可以改变存储的数据
注:以上内容为个人理解总结,了解即可,下面内容为重点
//#include<stdio.h> //int main() //{ // // int a = 10; // printf("%d\n", a);//打印结果为10 // printf("%p\n",&a);//&a是第一个字节的地址 %p是打印地址 // int*pa = &a;//pa是用来存放地址,在C语言中pa叫指针变量 *说明pa是指针变量(简称指针) int说明pa是int型 // *pa = 20;//*pa是解引用pa的地址,使之找到a的值 // printf("%d\n", a);//打印结果为20,所以,改变值,可以通过解引用地址并赋值改变!!!! // //解释:a存在在内存中,(随机生成的),&a是a的地址,将a的地址赋予pa(pa存放a的地址), // // int*pa=&a的*pa表示pa是指针变量,*pa=20是使用指针改变pa的值 // // printf("%d\n", sizeof(char*));// // printf("%d\n", sizeof(short*));// // printf("%d\n", sizeof(int*)); // printf("%d\n", sizeof(long*)); // printf("%d\n", sizeof(float*)); // printf("%d\n", sizeof(double*)); // //结果都为8(此处为x64环境),指针大小相同,因为指针是用来存放地址的,指针需要多大空间,取决于地址的存储需要多大空间 // return 0; //}
4.初识结构体
描述复杂对象,创建新的类型
//#include<stdio.h> //struct Stu//创建学生的档案 //{ // char name[20]; // int age; // double score; //}; //struct Book//创建书的信息 //{ // char core[30]; // float price; // char id; //}; //int main() //{ // struct Stu s = { "李华",19,60.5 }; // printf("1:%s %d %lf\n", s.name, s.age, s.score);//结构体使用固定搭配 s.+结构体成员 // //解引用操作 // struct Stu *ps = &s;//将结构体s的地址传给ps,*表示ps是一个指针 // printf("2:%s %d %lf\n", (*ps).name, (*ps).name, (*ps).score);//对ps进行解引用操作 // //等价于 // printf("2:%s %d %lf\n", ps->name, ps->name, ps->score);//箭头左侧为指针对象,右侧为成员 // return 0; //}
5.关键字练习
//1.结构体不是数据类型
//2.局部变量的作用域在局部变量所在的范围内(不一定是在主函数中)
//3.指针是变量,用来存放地址,sizeof(*char)一定是4或8字节
//4.static修饰,改变的是生命周期(变长)
//如下:
//#include<stdio.h> //int main() //{ // int i = 0; // int a = 2; // for (i = 0; i < 5; i++) // { // printf("%d ", sum(a));//8 10 12 14 16 // } // return 0; //} //int sum(int a) //{ // int c = 0; // static int b = 3;//第一次为3,之后不再执行int b=3;这条指令 // c += 1; // b += 2; // return(a + b + c); //} //存储类型(强制类型转换),且可以修饰局部变量,全局变量和函数,内容可以被改变
6.分支语句if else
//重点是运用场景,要会恰当的使用
// 1.正确,完美代码风格 if和else都要带上{} 舍弃num==5,写为5==num
//#include<stdio.h> //int main() //{ // int age = 19; // if (age <18) // { // printf("少年\n", age); // } // else if(18<=age&&30>age) // { // printf("青年\n",age); // } // else // { // printf("壮年\n", age); // } // return 0; //}
//2.出现if if else时,else和最近的if搭配(能看懂,但是不推荐这么写代码)
//#include<stdio.h> //int main() //{ // int a = 0; // int b = 2; // if (1==a) // if (2==b) // printf("呵呵\n"); // else // printf("哈哈\n"); // return 0;//没有打印结果,因为第二个if和else一起的,第一个if不满足,不会执行第二个if和else //}
//3.以下情况为else省略时的情况(不推荐,但是要看得懂
//#include<stdio.h> //int main() //{ // test(); // return 0; //} //int test() //{ // if (1) // return 0;//1为真,直接跳出循环,不会执行后面的程序 // printf("呵呵\n"); // return 1; //} //练习题:输出1-100之间的奇数 #include<stdio.h> int main() { int i; for (i = 1; 100 >= i; i++) { if (1==i%2) { printf("%d ", i); } } return 0; }