变量之七十二“变”!

一般来讲,更改变量空间所存储的信息有两种方式

  •  直接改变

  • 间接改变

直接改变变量的空间,是再简单不过的一件事情。比如:

int a;//在栈中开辟sizeof(int)大小的空间,空间名为a

在栈中开辟sizeof(int)大小的空间(在32位机下,大小为4B),空间名为a
。此时,名为a的这4个字节的空间是茫茫栈中再普通不过的了。由于我们并没有为其赋值,因此,这4个字节里的信息我们并不确定。

假如我们要给a赋值,也就是让这4个字节里面存储的是我们想要它存储的值,我们可以采用直接法:

a=100;

当然也可以采用间接法!

间接法改变变量,其本质就是通过地址实现。比如:

int b;
int *p=&b;
*p=200;

这是采用间接法改变变量值的其中一种。还有很多其他情况。比如:

  • 函数传指针做参数

  • 结构体成员赋值

由于函数只有一个返回值,当我们想返回两个值甚至更多时,仅仅依靠函数的返回值就显得有点心有余而力不足了。那么怎末解决这个需要呢?答案是传地址,也就是传指针类型的参数。比如:

void foo(int a,int b,int *sum,int *dif )
{
  *sum=a+b;
  *dif=a-b;
}

函数可以通过传参的方式改变变量的值,这也是我们要经常运用的编程技巧。
结构体成员赋值也是我们经常会见到的。如:

typedef struct node
{
  int data;
  struct node *next;
}Node,*Pnode;

void Input(Node node)
{
  node.data=5;
  node.next=(Node *)malloc(sizeof(Node));
}

不过,很遗憾,这种在函数中使用点运算符来给结构体成员赋值的方法并不可行。其原因就是函数传参的非指针性。函数参数为结构体类型,这表明程序执行时会在主函数栈中为Input函数开辟一个存储形参的空间,所以,当我们以这种方式来修改结构体成员的值时,实际上只是操作了形参空间的数据,并没有改变原本结构体成员空间的数据。

所以,我们只能通过传结构体指针变量的方法,来实现函数中对结构体成员的赋值。代码如下:

void Input(Node *pt)
{
  pt->data=5;
  pt->next=(Node *)malloc(sizeof(Node));
}

总之,想要通过间接的方式修改变量的地址,就必须传指针。此之谓:改变谁,就穿谁的地址!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值