c语言格式符合

c语言格式符合

const 修饰符

const

volatile 修饰

防止内存优化,每次从地址读值

typedef 别名

typedef

指针运算操作

指针加减运算

指针非线性访问数据

指针运算:p+n取得的是地址,p[n]取出的是内容,值

内存越界

c语言存在内存越界,c++并不存在

内存越界

值比较

NULL与0x0类似,但是0x0有的编译器不支持,所以推荐使用NULL

多级指针的例子

**grav表示数组中的字符串的地址

与上一个函数一样

res

数组的初始化

差异

字符串末尾默认加‘\0’

\0

编译器只有第一次赋值可以一次性解决,以后对于数组操作,只能逐一操作,即一位一位进行修改。

字符拷贝的问题

字符拷贝函数的原贝则:
内存空间和内存空间的逐一赋值的功能的一个封装体一旦空间中出现了0这个特殊值,函数就即将结束。

strcpy
strcpy()函数存在问题,如果destination值后面没有’\0’,则会一直拷贝。工程中尽量不用。

strncpy
strncpy可以设置拷贝字符长度,避免内存泄漏。

字符空间

字符与非字符空间

内存拷贝

memcpy

二维数组

二维数组表达方式

三维

结构体中字节对齐

即空间换效率,采取最大字节单位进行对其,所以空间大小都为4的倍数

代码编码后的地址位置

一般系统(ARM,x86等)的代码地址位于低地址

x86:一般为于0x8084..

代码地址

内存空间结构

结构

内存查看

只读空间:静态空间,整个程序结束时释放内存,生存周期最长
栈空军:运行时,函数内部使用的变量,函数一旦返回,就释放,生存周期是函数内
堆空间:运行时,可以自我管理分配和释放的空间,程序员决定的。

堆空间分配: malloc(),一旦成功,返回分配好的地址给我们,只需要接受,对于这个新地址的读法,由程序员灵活把握输入参数指定分配的大小,单位就是B。

malloc函数

释放空间: free(p)