1.4 间接赋值是指针存在的最大意义


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

int a = 10; //定义了一个变量(实参)//a看成0级指针
int *p = NULL; 定义了一个变量(形参)//1级指针
a = 20; //直接修改a的值
printf("a:%d \n", a);
p = &a; //a的地址赋给p //把一个变量去地址传给另外一个变量 //实参取地址传给形参
*p = 30; //间接赋值 如果p是a的地址,那么就间接的修改a的值 //*p放在等号的左边
printf("a:%d \n", a);
//p = &a; //a的地址赋给p 把这句话,转成函数调用
getLen(&a);
int getLen(int *p)
{
*p = 40; //间接赋值 如果p是a的地址,那么就间接的修改a的值 //*p形参,去间接的修改实参的值
}

//向通过形参去直接修改实参,
int getLen2(int p)
{
p = 50; //这个不能修改实参的值,修改的只是形参!!!!!
}


间接赋值的应用场景有2个
场景1:在函数指针 *p1++ = *p2++
场景2:指针做函数参数,通过*p形参求间接的修改实参的值,这才是指针存在的最大意义、。
这才是C语言特有的现象,才是指针的精华


//*p间接赋值是指针存在的最大意义(现实意义)》》》指针做函数参数

接口的封装和设计

函数调用时,形参传给实参,用实参取地址,传给形参,在被调用函数里面用*p,
来改变实参,把运算结果传出来。
指针作为函数参数的精髓。

推论
/指针做函数参数
//函数调用过程中,
//用1级指针(通常是形参,)去修改0级指针(通常是实参)的值
//用2级指针(通常是形参,)去修改1级指针(通常是实参)的值
//用3级指针(通常是形参,)去修改2级指针(通常是实参)的值
//用8级指针(通常是形参,)去修改7级指针(通常是实参)的值
//用n级指针(通常是形参,)去修改n-1级指针(通常是实参)的值

/*


重点剖析
主函数调用被调函数时,是主调函数提前分配内存,然后再去执行被调函数。
要站在内存四区的角度去看他,要站在谁分配内存,谁释放内存的角度去看他。

void copy_str4(char *from , char *to)
{
while((*to ++ = *from++) != '\0')
{
;
}
}
//这是错误的啊,为什么?
//因为主调函数没有提前分配内存,没有内存,哪来的指针
Void main()
{
Char *buf = NULL;//没有分配内存
Copy_str(“aabbcc”, buf);
}
void main()
{
int rv = 0;
char from[100] = {0};//主调函数提前分配内存!!!!
char to[100] = {0};
strcpy(from, "fromabc");
rv = copy_str2(from, to);
if (rv != 0)
{
printf("func copy_str2:%d", rv);
return ;
}

printf("%s", to);
system("pause");
}


指针的输入输出
看见一级指针,要去分辨指针的输入输出特性
指针的输入特性:在主调函数里面分配内存,在被调用函数里面使用
指针的输出特性:在被调用函数里面分配内存,主要是把运算结果甩出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值