指针,变量从函数取值

结构体

  1. typedef struct _room
  2. {
  3.     int id;
  4.     char name[32];
  5.     int *p;
  6.     int phone;
  7. }room;

  8. room g_room = { 1, "room", NULL, 123};
//指针取值
  1. void get_roomp(room **r)
  2. {
  3.     *r = &g_room;
  4. }
  5. //变量取值
  6. void get_room(room *r)
  7. {
  8.     memcpy(r, &g_room, sizeof(room));
  9. }
  10. void test_struct()
  11. {
  12.     printf("%p, id = %d,%p, name = %s, %p, %p, phone = %d, %p\n",
  13.             &g_room,
  14.             g_room.id,
  15.             &g_room.id,
  16.             g_room.name,
  17.             &g_room.name,
  18.             &g_room.p,
  19.             g_room.phone,
  20.             &g_room.phone);

  21.     room *r;

  22.     get_roomp(&r);
  23.     printf("%p, id = %d,%p, name = %s, %p, %p, phone = %d, %p\n",
  24.             r,
  25.             r->id,
  26.             &r->id,
  27.             r->name,
  28.             &r->name,
  29.             &r->p,
  30.             r->phone,
  31.             &r->phone);

  32.     room rom;
  33.     get_room(&rom);
  34.     printf("%p, id = %d,%p, name = %s, %p, %p, phone = %d, %p\n",
  35.             &rom,
  36.             rom.id,
  37.             &rom.id,
  38.             rom.name,
  39.             &rom.name,
  40.             &rom.p,
  41.             rom.phone,
  42.             &rom.phone);
  43. }

简单变量

  1. int g_val = 1;
    1. //变量取值

  2. void get_val(int *v)
  3. {
  4.     *v = g_val;
  5.     printf("%p,%p\n", v, &v);
  6. }
    1. //指针取值

  7. void get_valp(int **v)
  8. {
  9.     *v = &g_val;
  10. }
  11. void test_val()
  12. {
  13.     printf("%p\n", &g_val);
  14.     /*addr|val
  15.      * | |
  16.      * --|--|
  17.      * &v|v |
  18.      * --|--|
  19.      * | |
  20.      * --|--|
  21.      * | |
  22.      * --|--|
  23.      */
  24.     int v = 0;
  25.     printf("%p\n", &v);
  26.     get_val(&v);
  27.     printf("%p, %d\n", &v, v);
  28.     /*addr|val |val
  29.      * | | | |
  30.      * --|--| |--|
  31.      * &p|p | |*p|
  32.      * --|--| |--|
  33.      * | | | |
  34.      * --|--| |--|
  35.      * | | | |
  36.      * --|--| |--|
  37.      */
  38.     int *p;
  39.     printf("%p\n", p);
  40.     get_valp(&p);
  41.     printf("%p, %d\n", p, *p);
  42. }

指针取值

通过修改指针的指向的地址(*p),不需要分配内存, * =  &g_val ;
  1. void get_valp(int **v)
  2. {
  3.     *= &g_val;
  4. }

             通过函数获取需要传递二级指针 ( room  * * r )
  1. void get_roomp(room **r)
  2. {
  3.     *= &g_room;
  4. }

变量取值

1. memcpy
  1. void get_room(room *r)
  2. {
  3.     memcpy(r, &g_room, sizeof(room));
  4. }

2. 一个个赋值,比较慢
  1. void get_val(int *v)
  2. {
  3.     *= g_val;
  4.     printf("%p,%p\n", v, &v);
  5. }

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(173) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kelsel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值