首页 > 代码库 > 指针大览
指针大览
字面量
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
指针大览
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。