int *p;//p是变量的名字,int*表示p变量存放的是int类型变量的地址 p=&i;//p保存了i的地址,因此p指向i
如果一个指针变量指向了某个普通变量,则(*指针变量)就完全等于(普通变量)
例:
p指向普通变量;
在所有出现*p的地方都可以替换成i
在所有出现i的地方都可以换成*p
指针就是地址,地址就是内存单元的编号。
指针的实质就是一个操作受限的非负整数
*的含义1.乘法
2.定义指针变量 int *p;
3.指针运算符 //如果p是一个已经定义好的指针变量,*p表示以p的内容为地址的变量
指针和一维数组 一维数组名一维数组名是个指针变量
他存放的是一维数组第一个元素的地址
int a[5];//a是数组名,5是数组元素的个数
函数确定一维数组需要两个信息,数组首地址和数组元素个数。
pArr[3]<=>*(pArr+3) //3是下标
a[3]<=>*(a+3) //3是下标
下标和指针的关系如果p是个指针变量,则p[i]永远等价于*(p+i)
指针变量不能相加,不能相乘,不能相除。
如果两个指针变量指向的是同一块连续空间中的不同存储单元,则这两个指针变量才可以相减。
动态内存分配 静态数组传统形式定义的数组,该函数运行时,其空间会一直存在,直到函数运行结束时,数组空间才被释放。
传统数组也叫静态数组。
动态内存构造int i=5;//分配了4个字节,静态分配。 int *p=(int*)malloc(4);//p本身的内存只能在p变量所在函数运行终止时由系统自动释放。 int *pArr=(int*)malloc(4*len);//类似于int pArr[len]
函数运行结束,自动释放静态内存。
静态变量不能跨函数使用,动态内存可以跨函数使用。



