C语言用法_学_思_行

目录

动态内存实现堆栈

模式切换的一种方式

宏能完成函数不能完成的功能

我喜欢的交换两数的方法

# 将宏定义的名字输出出来

break 只能用作循环或者switch语句中

通过指针对数组初始化

输出指针地址

关于指针的一些认识

经常看见的extern "C"

C语言文件编译的过程

C语言文件编译后内存的分段


 

动态内存实现堆栈

通过断言在不合适的时候使程序终止。若这不是希望的处理方式(不希望程序终止),可以(不使用断言)当这个函数失败时,用一个较小的长度再申请一次试试

模式切换的一种方式

宏能完成函数不能完成的功能

对于下面这个并不认同,函数换一种方法也是可以实现的,比如将sizeof(int)作为一个实参传入

感觉这更像是函数不能完成的功能:直接操作地址

我喜欢的交换两数的方法

针对有符号数我试着也是可以的。

后来了解C++的一点皮毛,了解到另外一种交换两数的方式,最初的时候了解到直接传参无法交换两数,需要使用指针,后来了解到C++这种方式和直接传参很相似,只是定义函数时略有不同。

引用可以看作是数据的一个别名,通过这个别名和原来的名字都能够找到这份数据。

引用在定义时需要添加&, 在使用时不能添加&,使用时添加&表示取地址。

# 将宏定义的名字输出出来

break 只能用作循环或者switch语句中

通过指针对数组初始化

一般数组的初始化,在初始化一个元素后,未初始化的元素都会被设置为0

输出指针地址

关于指针的一些认识

  • 值的类型并不是它的内在本质,而是取决于它被使用的方式
  • 关于指针加1,不是内存地址加1,而是指针所指向的类型加1,内存地址可能实际加了2或者4
  • 以指针的方式将数组传递给函数,就可能修改数组元素的值,而不是数组元素的一份拷贝
  • C语言中没有严格的数组的概念,因此函数无法将数组作为参数,同样无法将数组作为返回值,通常使用指针或结构体代替实现
  • 下标引用的优先级 高于 间接访问int matrix[3][10]; int  (*p)[10] = matrix; 表示一个指向整形数组的指针(要加括号), 如果一维数组需要一个指向整形的指针
  • 两个数组元素的地址相减,其值并不是等于两个地址数值上的差,而是等于这两个地址之间内存单元的个数。相比较的是指针加1,内存地址并非加一,而是加上它所指向的数据类型占用的字节数
  • sizeof指针的大小,在32bit环境中为4字节,也即unsigned int的字节长度,即使它指向的是一个char型数值

经常看见的extern "C"

指示编译器这部分代码按照C语言进行编译,而不是C++的。主要作用就是为了能够正确实现C++代码调用其他C语言代码。

C语言文件编译的过程

C语言文件编译后内存的分段

猜你喜欢

转载自blog.csdn.net/quanquanxiaobu/article/details/108189830
今日推荐