1.内存四区:
堆区:系统自动开辟,自动释放
堆区:程序员主动开辟主动释放
全局区:全局静态变量
代码区:保存代码
2.地址
地址的具体含义为,例如小明住在21栋5楼东户那么小明,这个地址为一个地址,而这个地址 里东西为值地址有以下特性,唯一,地址也是一种数据。
首地址:为一个存储序列的第一个地址
3.指针变量:
#include <stdio.h>
main()
{
int a = 111;
int *p =&a;
printf("a的值%d\n",a);
printf("a的地址的值%d\n",&a);
printf("指针变量pa的值%d\n",p);
printf("pa指向的值%d\n",*p);
}
作用:存储地址。
定义一个指针: int p=NULL; //其中q是一个变量,不要把p看做一个整体;其实p就是一个int* 的变量,可以这样看 数据类型变量名,星号只能说明这里是一个指针变量。
野指针:定义一个指针没有指向任何的地址,在指针进行初始化时一定要赋值。
4.指针的引用:
指针变量自己的值:p;
指针变量指向的值:pa
5.空指针:不确定类型的指针 void *
malloc(4)//开辟四个字节那么这个四个字节存放什么的?可以使 int unsigned int floa t型
void可与强制转换为其他任意的类型
(int*)malloc(4)
(float*)malloc(4)
(char(*)[4]) malloc(4)
如果给一个房子需要放东西,那么怎么把东西放到进去,按四个字节 还是一个字节放,申请四个字节不一定是把这个内存占满,大的可以装小的小的不可以装大的
6.指针的运算
指针的运算其实就是地址的偏移,两个地址之间的运算是没有任何意义的
就有这些运算 ++ -- + - 这几种格式
#include <stdio.h>
main()
{
char a ;
char *pa = &a;
int b;
int *pb=&b;
int c[10];
int(*pc)[10] = &c;
printf("pa=%d\tpa+1=%d\n",pa,pa+1);
printf("pb=%d\tpb+1=%d\n",pb,pb+1);
printf("pc=%d\tpc+1=%d\n",pc,pc+1);
}
pa=1637199 pa+1=1637200
pb=1637172 pb+1=1637176
pc=1637112 pc+1=1637152
请按任意键继续. . .
7.一维数组与指针
&a是指向整个数组的指针
a是数组名:[数组名是这个数组的首地址]
int p1=a;
int(pa)[5] = &a;//数组指针
a指向数组的第一个存储单元 a[0]
访问数组元素
数组名:
*(a+m) //a[m]
8.二维数组与指针
arr[m][n] = (*(arr+m)+n)
网友评论