C语言进阶上篇

一,指针的定义和初始化

1,只要是指针变量就占4个字节,不管指针指向什么类型的变

C语言进阶上篇_第1张图片

2,指针初始化

C语言进阶上篇_第2张图片C语言进阶上篇_第3张图片

3,强制类型转换,加(int*)是把16进制数强制转换成为指针类型,但实际上不建议这样做,因为强制转换后的地址不一定存在,操作一个不存在的地址,程序运行错误。

C语言进阶上篇_第4张图片###4,将指针赋值NULL,按十进制打印出来就是0,说明该指针不指向任何地址。野指针指向一个随机的的地址。
C语言进阶上篇_第5张图片

二,段错误的概念和成因

C语言进阶上篇_第6张图片C语言进阶上篇_第7张图片C语言进阶上篇_第8张图片

三,指针赋值

C语言进阶上篇_第9张图片

四,数组名

1,数组名 == 首地址 == 第一个元素的地址,

2,对数组的首地址加上偏移量就可以得到其他元素的地址。

3,数组名是一个常量,不能对其直接赋值。

C语言进阶上篇_第10张图片

4,指向数组的指针

C语言进阶上篇_第11张图片C语言进阶上篇_第12张图片

P10 函数传参

1,值传递:在主函数开辟栈空间,给swap函数开辟栈空间,当函数运行时,将主函数栈空间中的值拷贝到swap栈空间中去,当swap函数执行完成之后,栈空间就会被释放,形参就消失了,就不会对实参进行改变了。
2,指针传递:

3,地址传递
总结:
C语言进阶上篇_第13张图片

P12指向数组的指针和数组的遍历方式

C语言进阶上篇_第14张图片C语言进阶上篇_第15张图片
当函数外面,使用sizeof(数组名)时,表示的是整个数组的大小,在函数里面使用sizeof(数组名)时表示的是指针的大小。
C语言进阶上篇_第16张图片
C语言进阶上篇_第17张图片C语言进阶上篇_第18张图片

P14,二级指针和概念

在这里插入图片描述C语言进阶上篇_第19张图片

P15,常量指针和指针常量

1,常量指针:
C语言进阶上篇_第20张图片C语言进阶上篇_第21张图片C语言进阶上篇_第22张图片

P16,指针常量

C语言进阶上篇_第23张图片C语言进阶上篇_第24张图片C语言进阶上篇_第25张图片

P19,linux内存管理


C语言进阶上篇_第26张图片

P22,变量的存储类型1

C语言进阶上篇_第27张图片全局变量(非静态),默认初始化为0。
全局静态变量,默认初始化为0。
指针定义为全局变量,会默认初始化为NULL。
C语言进阶上篇_第28张图片两次调用相同的函数,系统都会为其分配栈空间,然后重新初始化。

P23,变量的存储类型2

C语言进阶上篇_第29张图片size可以查看数据段,代码段,bss占的内存。bss是未初始化区,data是初始化区,.text是代码段。
全局变量、静态变量的内存地址在编译的时候就确定了。
C语言进阶上篇_第30张图片

P26,链接属性

C语言进阶上篇_第31张图片C语言进阶上篇_第32张图片

P27 extern的使用,使用extern声明是引用型声明,是不分配内存空间的。

1,下面的使用会报错,因为a和b未声明。
C语言进阶上篇_第33张图片2,改为extern就可以了。
C语言进阶上篇_第34张图片上图是错误的,a只是用来声明,不能对其进行赋值。
C语言进阶上篇_第35张图片
C语言进阶上篇_第36张图片

P29,主调函数和被调函数

P31,指针函数

在这里插入图片描述

指针函数返回指针的时候如果采用局部变量的指针返回时,就会出现错误,因为局部变量的空间有可能会被释放。如下图:
解决的办法:
1,在局部变量前加static,把局部变量变为静态局部变量,改变变量的生命周期;
C语言进阶上篇_第37张图片
2,将局部变量改为全局变量;
C语言进阶上篇_第38张图片

3,使用malloc开辟内存。

P33, 函数指针


C语言进阶上篇_第39张图片

P34,回调函数


P36,可变参数列表

C语言进阶上篇_第40张图片

C语言进阶上篇_第41张图片
C语言进阶上篇_第42张图片C语言进阶上篇_第43张图片

P37,函数指针数组

C语言进阶上篇_第44张图片
C语言进阶上篇_第45张图片C语言进阶上篇_第46张图片
C语言进阶上篇_第47张图片C语言进阶上篇_第48张图片

P39,字符串

C语言进阶上篇_第49张图片

P41,字符串和字符数组

全局字符数组默认初始化为0,局部字符数组默认初始化为随机数。

C语言进阶上篇_第50张图片

字符数组初始化

C语言进阶上篇_第51张图片

P43 指向字符串的指针

C语言进阶上篇_第52张图片C语言进阶上篇_第53张图片

P45,字符串处理函数

C语言进阶上篇_第54张图片C语言进阶上篇_第55张图片C语言进阶上篇_第56张图片
C语言进阶上篇_第57张图片C语言进阶上篇_第58张图片

P49,C标准库函数

C语言进阶上篇_第59张图片C语言进阶上篇_第60张图片C语言进阶上篇_第61张图片

P51, 结构体和联合

C语言进阶上篇_第62张图片

P54,结构体变量的引用和赋值

C语言进阶上篇_第63张图片

数组名是一个常量,不允许赋值,可以使用copy的方式进行赋值。–strcpy

C语言进阶上篇_第64张图片

P55, 结构体嵌套

C语言进阶上篇_第65张图片C语言进阶上篇_第66张图片

P56,结构体数组

C语言进阶上篇_第67张图片C语言进阶上篇_第68张图片

P58,结构体指针

结构体指针可以指向自身

在这里插入图片描述

P59,结构体指针作为函数参数

![在这里插入图片描述](https://img-blog.csdnimg.cn/07a4d783b147400b93cc27b2b0c8691c.png
C语言进阶上篇_第69张图片

P61,类型别名typedef

C语言进阶上篇_第70张图片C语言进阶上篇_第71张图片

P64,字节对齐

C语言进阶上篇_第72张图片
C语言进阶上篇_第73张图片在这里插入图片描述

P65, #pragma指令设置字节对齐

C语言进阶上篇_第74张图片

P66, 位段的概念和定义

P67,联合

C语言进阶上篇_第75张图片
C语言进阶上篇_第76张图片

你可能感兴趣的:(c语言,数据结构,开发语言)