首页 > 代码库 > 指针大览

指针大览





字面量
Int a = 10 中的10 存放在除堆,栈,全局区,之外的位置中,可以当作在代码区中。
存放在堆,栈,全局区的数据都可以取地址(&),可以以此来分辨。


 內存塊的數據打包
(Unsigned char ×buf +len )


指针也是一种变量 ,编译器只自动分配4个字节
Int *a     
Sizeof(a)= 4 








指针存在的最大意义
1. 在同一函数里的指针   p1++ = p2++
2. 指针做函数参数,通过*p指针间接修改实参的值(间接赋值)
void getlength(int *p)
{
*p = 40;
}
int main()
{
int a = 10;
int *p = NULL;
a = 20;
p = &a;
*p = 30;
printf("a:%d \n",a);
getlength(&a);
printf("a:%d \n",a);
system("pause");
return 0;
}




间接赋值三个条件
1. 定义一个变量(实参),定义一个变量(形参)
2. 建立关联(实参取地址传给形参)
3. *p形参,间接去修改实参的值


指针做函数参数(多级指针模型)
函数调用过程中,
用一级指针(通常是形参)去修改0级指针(通常是实参)的值
用2级指针(通常是形参)去修改1级指针(通常是实参)的值
用3级指针(通常是形参)去修改2级指针(通常是实参)的值
用4级指针(通常是形参)去修改3级指针(通常是实参)的值
用n级指针(通常是形参)去修改n-1级指针(通常是实参)的值
函数调用时,形参传给实参,用实参取地址,传给形参,在被调用函数里面用*p来改变实参,把运算结果传出来。


【】 与 *
buf[i ] --->buf[0+i]--->* (p +i)
站在c++编译器的角度,*p相当于我们程序员手工(显示)利用间接赋值,去操作内存
【】怎么理解,只不过是c++编译器帮我们程序员做了一个 * p的操作 








 主调函数可以将堆区,栈区,全局区的内存地址传给被调函数(主调函数分配内存)
Void abc(int*d,int *c)
{
}


Int main()
{
   Int a;
   Int b;
    Abc(a,s);
    Rerturn 0;
}




避免野指针方法
步骤一:
            在指针定义的时给指针赋值 NULL
步骤二:
             释放指针前判断指针是否是NULL
步骤三:
             释放指针后马上给指针赋值NULL


指针大览