【C语言基础学习笔记】一、初始C语言(3)

说明:我是一个初学c语言的小白,很多地方都不是很理解,所以就会自己动手敲代码进行相应的推理验证,希望可爱的你在看到这些步骤时,不要嫌弃我啰嗦。(比如吐槽:这作者咋这样呀,这么简单的还要敲代码验证,真菜呀!…我:好吧,我不装了,我摊牌了,我确实菜,真的菜,咋滴啦,还不允许初学者菜呀!)


EOF-- - end of file 文件结束标志 值: - 1
提示:本小结是初始C语言最后一小部分内容,之后会有一个初始C语言总结的文章,包含初始C语言(1)(2)(3)复习专用的思维导图,一些用于编程练习的case,以及个人的学习心得及总结(小白专用)。

11.常见关键字-- - 32个

在这里插入图片描述

注意:定义的变量名称不能和关键字相同。

特殊说明:regiter 寄存器 cpu快速访问 register int a = 10;
struct 结构体关键字 union 共用体关键字
typedef 类型重定义 typedef unsigned int u_int;

重点详解:static 在c语言中,staic是用来修饰变量和函数的
1)修饰局部变量 - 静态局部变量
static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。
在这里插入图片描述
在这里插入图片描述
F10 进行调试 需要进入循环体或者函数体的时候按F11(Fn + F10 、Fn + F11)
拓展说明:static修饰局部变量改变局部变量的生命周期(本质上是改变了变量的存储类型,从栈区-- > 静态区)
在这里插入图片描述
2)修饰全局变量 - 静态全局变量
一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。(本质上改变了全局变量的链接属性,从外部链接属性变成内部链接属性)
在这里插入图片描述
在这里插入图片描述
用static修饰后
在这里插入图片描述
在这里插入图片描述
3)修饰函数 - 静态函数
一个函数被static修饰,改变了函数的链接属性,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。(本质上改变了函数的链接属性,从外部链接属性变成内部链接属性)
在这里插入图片描述
在这里插入图片描述
使用static修饰函数后
在这里插入图片描述
在这里插入图片描述
#define定义常量和宏
①#define定义标识符常量 #define Max 100
②#define定义宏 #define Max(x,y) (x > y ? x : y)
在这里插入图片描述
拓展:什么是宏?为什么说#define定义的标识符常量和宏是字符的简单替换?
①计算机科学里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换;
② 当我们使用 #define Add(x,y) x+y
计算 4 * Add(2,3) 表达式的时候,猜猜结果是多少,是4 * 5=20吗? 实际上 应该是4 * 2+3=11,看懂这个例子应该就能明白为什么说是字符的简单替换了!


12.指针

要想弄懂指针的概念,首先要明白内存的含义
在这里插入图片描述
简单理解:地址就是对内存空间有效利用的一种编号方式类似于我们现实生活中将空间进行编号(比如全球划分为七大洲、中国划分为34个省份(包含台湾省)等),存储这些地址信息的变量我们赋予其特殊的类型—指针(专门存放地址的变量,本质上还是变量,是变量就会有存储空间,也就有其对应的地址,也就是说指针本身也有对应的地址,虽然指针本身的内容也是存放地址信息的。),地址的大小跟编号的方式有关,32位平台有32根地址线(现实中物理的线),所以可以存储32个bit=4个字节 地址信息,所以地址的大小是4个字节,64位平台有64根地址线,地址大小是8个字节。

% p 打印地址
对于32位平台,有32根地址线,所以其地址对应bit的个数为32 字节长度为4 所以32位平台的指针的长度均为 4个字节
对于64位平台,有64根地址线,所以其地址对应bit的个数为64 字节长度为8 所以64位平台的指针的长度均为 8个字节
32位平台:
在这里插入图片描述
64位平台:
在这里插入图片描述
在这里插入图片描述
指针定义的方式 类型变量 * 指针变量名 = &变量名;
例如 int a = 10;
int* p = &a; //注意指针变量名为 p,而不是*p
char ch = ‘a’;
char* pc = &ch;

利用指针找到对应变量的方式 解引用操作符*
例如 int a = 10;
int* p = &a;
*p = 20; //实际上就是 a = 20;


13.结构体

在描述一些复杂的对象时,我们往往要从多个方面,多个角度来描述,这个时候我们就需要利用结构体类型了,结构体类型是一种自定义类型,其关键字为 struct
定义方式:struct 结构体类型名称
{
类型 结构体成员1;
类型 结构体成员2;
……
}

初始化定义结构体变量的方式为:
struct 结构体类型名称 结构体变量名 = { 成员1赋值,成员2赋值…… }

#include<stdio.h>
	//定义一个结构体类型
	struct Book
{
    
    
	char name[20];
	int price;
};
int main()
{
    
    
	//新建一个结构体Book类型的变量
	struct Book b1 = {
    
     "c语言程序设计",15 };
	printf("书名:%s\n", b1.name);
	printf("价格:%d\n", b1.price);
	return 0;
}

在这里插入图片描述

对于结构体变量,也可以进行相应的操作,如更改其成员的值,定义相应的指针等等。
在这里插入图片描述

#include<stdio.h>
//定义一个结构体类型
struct Book
{
    
    
	char name[20];
	int price;
};
int main()
{
    
    
	//新建一个结构体Book类型的变量
	struct Book b1 = {
    
     "c语言程序设计",15 };
	struct Book* pb = &b1;
	printf("书名:%s\n", b1.name);
	printf("价格:%d\n", b1.price);
	printf("书名:%s\n", (*pb).name);
	printf("价格:%d\n", (*pb).price);//. 结构体变量.成员
	printf("书名:%s\n", pb->name);// ->  结构体指针->成员
	printf("价格:%d\n", pb->price);
	b1.price = 20;
	printf("修改之后的价格为:%d\n", b1.price);
	pb->price = 25;
	printf("第二次修改之后的价格为:%d\n", b1.price);
	(*pb).price = 30;
	printf("第三次修改之后的价格为:%d\n", b1.price);

	return 0;
}

在这里插入图片描述

要想修改书名 想通过b1.name = { “c++” }是行不通的,那为什么b1.price可以变化呢,这是因为price是一个变量 而 name是一个数组
这个时候可以通过strcpy()函数来实现书名的更改,strcpy-- - string copy 字符串拷贝 strcpy(b1.name, “c++”); 头文件为 string.h
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/QIYICat/article/details/115487259