Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1570681
  • 博文数量: 596
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 173
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-06 15:50
个人简介

在线笔记

文章分类

全部博文(596)

文章存档

2016年(1)

2015年(104)

2014年(228)

2013年(226)

2012年(26)

2011年(11)

分类: C/C++

2013-08-06 21:21:18

结构体

  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. }

阅读(700) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~