C语言学习笔记

在终端下

q:退出手册

ctrl+c:结束进程

ctrl+d:选中一个,依次往下选中

./:当前路径

数组为什么从0开始,本质就是偏移量

只显示这一个警告。

1、下面使用-w选项(-w的意思是关闭编译时的警告,也就是编译后不显示任何warning,因为有时在编译之后编译器会显示一些例如数据转换之类的警告,这些警告是我们平时可以忽略的。)

gcc -w -o test_w_wall testwwall.c

不会显示任何警告,直接编译成功。

2、-Wall选项意思是编译后显示所有警告

gcc -Wall -o test_w_wall testwwall.c

数组与指针 

数组在C语言里面是唯一一个可以越界访问的

例如:arr[5]={1,2,3,4,5};

arr[5]=10;

输出arr[5]为10.

如果第六个属于你的地址,那就没有问题,如果不是自己的地址,就是非法访问。

%s:遇到结束符或者换行符才代表结束

arr[5]="hello"没有换行符的话也是字符数组

 

ch2有一个结束符,所以不会访问到ch3 ,ch1只是字符数组,没有结束符

后面越界的输出内存本来存放的一些乱码

把数字当成ASCII值存进去了

32位系统:用32位对系统进行编号

一个地址差一个字节

i越界就会读到f的值,目前不会说是非法越界

 野指针,也可能指向系统的重要数据,稍微修改可能造成不可预想的后果。

定义了没有初始化,就是野指针。

不可访问区间:指向空指针,安全,不会导致系统崩掉,但程序会崩掉

指向数组的指针,所以指针在加一的时候,相当于加了一个数组的距离 

只涉及到指针的指向,没有涉及到运算,也就是说没有转换成3,只是强制性的f_p指向3.14,但是f里放的是3.14的二进制码,因为*f_p的f_p是一个整型,所以会按照整型的思路来分析这个二进制码 

arr是数组名,代表着arr里面的首元素地址

而&arr代表数组的首地址

a表示首元素的地址,+10表示10个偏移量 ,a+10这个地址下,

被称为匿名数组,没有取地址,也没有用sizeof(),相当于H的地址, 

变长数组不能被初始化 

*parr,代表指针,int *说明指向的类型为int*,所以偏移加1的时候,偏移8个字节,到了c位置,偏移2的时候会越界,

内存管理 

数据段:存放常量数据,搞一个双引号,里面写字符串,就放在数据段

栈:整型a,指针p就放在栈上面。

数据段相比栈就小很多

初始化代码由编译器写的

不可访问:NULL,空指针就指向这里

把这个存放到环境变量,这是栈空间里的第一个区域,

命令参数:把函数参数,命令行参数存进去 

局部变量:函数大括号里面就是局部变量

是系统自动加进去

我们写的代码其实只是很小的一部分,更多的内存放初始化代码 (编译器自动加进去的)

栈空间,多一个函数多一组 

可以打印所有信息

地址(内存)不会返回,但是值可以返回 

放在数据段里,不会被回收,不同于栈空间

 

内存改小了,地址不变,后面多出来的都是野指针,后面的都被丢弃了,只是没清理没人使用

内存变大,原本的地址会释放,换成新的地址

 

另外申请的不会被修改

申请空间:

常用:malloc ,calloc

不常用:realloc

当函数运行时,会有新的栈空间出来,存放一些函数的局部变量,当函数退出时,局部变量,也就是栈空间就会被释放

我能只能操作堆空间的,生成和释放

栈空间:自动生成,自动释放 

 

数组在栈空间会被释放,所以返回没用 

修改:

就会放在数据段里

 

p的指针(地址)属于栈空间

printf属于堆空间 

回调函数是我们自己改不了,第三方的

argc参数个数,参数里面每一个值 

结构体大小占得字节在不同系统中字节不一样。

可移植的结构体类型

将结构体进行压实 

联合体共用一个内存,所以初始地址一样

整个联合体大小取决于最大类型的大小 

一般枚举用在Switch语句中,枚举必须写常量,case后面也设必须跟常量

编译器

翻译过来可能会出现多个.o

链接:相同地方整合一起,不同地方分开来 宏

太长需要换行,可以加\

 

 

字符可以但是字符串不行,字符就是整型,单字节整型,有对应的ASCII码值。 

头文件

可以查找路径 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值