main函数可以在栈分配空间/可以再堆里分配空间,全全局区分配内存
铁律:指针是一种数据类型
在指针声明时,*号表示所声明的变量为指针
在指针使用时,*表示操作指针所指向的内存空间的值
*p相当于通过地址找到一块内存;然后操作内存
*p放在等号的左边赋值(给内存赋值)
int a = 10;
int *p3 = NULL;
P3 = &a;
*p3 = 20;//间接修改a的值
//*就像一把钥匙,通过一个地址(&a)去修改a变量的表示的内存空间
*p放在等号的右边取值(从内存获取值)
{
int c = 0;
c = *p3;//c = 20
//*p放在=号左边,写内存
//*p放在= 号的右边 读内存
printf("c:%d\n", c);
}
指针变量和它指向的内存块是两个不同的概念
给p赋值 p= ox1111;只会改变指针变量的值,不会改变所指向的内容
给*p赋值 *p = ‘a’,不会改变指针变量的值,只会改变所指向内存块的值
注意:不断的给指针变量赋值,就是不断的改变指针变量(和所指的内存空间);建立指针指向谁,就把谁的地址赋值给指针
指针也是一种数据类型,是指它指向的内存空间的数据类型没有任何关系
含义:指针步长(p++),根据所指内存空间的数据类型来确定
强化野指针
/*野指针产生的原因
指针变量和它所指向的内存空间变量是两个不同的概念
释放了指针所指向的内存空间,但是指针变量本身没有重置成NULL
造成通过释放时通过if(p1 != NULL)
避免的方法:1)定义指针时初始化为NULL 2)释放指针所指向的内存空间后,把指针设置成NULL*/
注意:向NULL地址copy数据,会出现错误,因为,0开始的地址是操作系统保护的空间