C语言数组和指针很多人都不能学的很懂,在这里看看学霸总结的笔记,可以帮助你学习。
1. 指针是什么
1》 内存地址编号:
0x00 00 00 00 ----0xff ff ff ff
2》 存储内存地址编号
C提供了指针这个基本数据类型来存储地址编号,占4字节
3》 数据结构的意义
操作内存的字节
2. 指针和指针变量的意义
希望通过指针变量去控制内存空间
3. 怎么用
定义:
内存分区:
静态常量区:静态变量和常量
代码区:存储指令
栈:临时变量,
堆:程序员自己使用
存储类型:
数据类型修饰符
指针初始化
空指针和野指针
Const
%p ----打印地址
给指针赋值地址常量;注意类型;强制转化;
Char *p =(char *)0x1245678;
内存的分配
字节对齐;字节整数倍分配
数据的存储大小端
小端存储:低地址存低位,高存高
大端存储:低地址存高位,高存底
常见的指针类型
数组传参
要注意传参数 数组长度
指针的理解
目的:操作连续的内存空间,即数组;
指针数组的理解
目的:操作二维数组
数组指针 int (*p)[10] //行指针
主要操作数组
Int a[10]; P=&a; //没有意义
Int b[5][10] P=b;
多级指针
指向指针变量的指针
目的、作用:操作指针数组
数组名的理解
类型升级的地址常量;
数组名传参理解:传地址,如上原因;
数组不能动态分配内存
静态分配;
指针数组的动态malloc
指针的指针
数组名的意义:
代表整个数组:地址常量:首地址:
数组名的类型:&第一个元素
数组是一个构造的数据类型
数组的内存存储
行存储
Main函数传参
指针数组名的传参;
Char * p [3];
P[1] 字符串的首地址
P[1][3] p[1]指向字符串的第3个元素
Malloc函数
在堆上分配一个size大小的内存空间
成功返回内存空间的首地址;失败NULL
用完之后必须用free(void*)释放内存空间;
注意保护malloc的返回地址;free释放;必须是malloc释放;
指针p的类型
1 决定了*p一次操作的字节数
2 决定了p+1指针移动的字节数
访问越界问题;
Printf函数的参数从右向左传、
指针作为函数参数的目的
目的:
1. 节省函数参数的分配内存空间
2. 为了方便更改指针指向的内容
指针作为函数返回值的目的:
目的:
1. 函数体外需要处理地址
Void * p
Free(p); p编程野指针,静止对野指针进行取值操作。
A和&a的区别
指针的经典:
1. 改变指针的指向
2. 更改指针的一次操作的范围(字节数)
(*ptr)[1]