Chinaunix

标题: #define _MY(name) #name,&name [打印本页]

作者: 人在深圳混    时间: 2008-11-01 16:39
标题: #define _MY(name) #name,&name
#define _MY(name)  #name,&name

typedef struct {
   char *name;
   void *addr;
} BI;

main()
{
static int a  = 20;

static BI params [] = {
   _MY  (a),
} ;


}


大侠,如上面的程序,请问,
1,#define _MY(name)  #name,&name 这个定义怎么解释?
2,我如何打印出params的第二个值呢?

万分感谢。
作者: win_hate    时间: 2008-11-01 16:39

  1. #define _MY(name)  #name,&name

  2. typedef struct
  3. {
  4.   char *name;
  5.   void *addr;
  6. } BI;

  7. main ()
  8. {
  9.   static int a = 20;

  10.   static BI params[] = {
  11.     _MY (a),
  12.   };

  13.         printf ("%s\n", params[0].name);
  14.         printf ("%p\n", params[0].addr);
  15.         printf ("%d\n", *((int *)params[0].addr));
  16. }
复制代码

作者: suraid    时间: 2008-11-01 16:46
#是C中宏定义的一种特殊的使用,具体可以参见
http://blog.suraid.cn/index.php/2008/09/macro/

第二个值?void *addr么?
我通常是这样做的:
printf("0x%x\n", params[0].addr);
直接打印出16进制的地址值
作者: win_hate    时间: 2008-11-01 16:47
#define _MY(name)  #name,&name

_MY(a) 被展开成

"a",&a

下面的代码能打印出 params 中的值。

  1. #define _MY(name)  #name,&name

  2. typedef struct
  3. {
  4.   char *name;
  5.   void *addr;
  6. } BI;

  7. main ()
  8. {
  9.   static int a = 20;

  10.   static BI params[] = {
  11.     _MY (a),
  12.   };

  13.         printf ("%s\n", params[0].name);
  14.         printf ("%p\n", params[0].addr);
  15. }
复制代码

作者: suraid    时间: 2008-11-01 16:52
嗯,%p输出的是带段地址的指针地址
作者: 人在深圳混    时间: 2008-11-01 16:54
但是如何把20这个值打印出来呢?
作者: win_hate    时间: 2008-11-01 16:57
addr 是个 void 指针,所以要用 (int *) 转换,然后....
作者: 人在深圳混    时间: 2008-11-01 16:59
多谢了,小弟刚学习。
作者: suraid    时间: 2008-11-01 17:02
有了指针还怕打印不出来~呵呵~
printf("%d\n", (*(int *)params[0].addr));
作者: 菜鸟小刀    时间: 2008-11-01 17:09
受教了
作者: lrg223    时间: 2008-11-01 17:37
原帖由 人在深圳混 于 2008-11-1 16:59 发表
多谢了,小弟刚学习。


me too
作者: 人在深圳混    时间: 2008-11-01 17:40
原帖由 suraid 于 2008-11-1 17:02 发表
有了指针还怕打印不出来~呵呵~
printf("%d\n", (*(int *)params[0].addr));


为什么大侠你的,和上面那位大侠的打印的结果是一样的呢?两种写法把小弟搞糊涂了。
作者: maxyma    时间: 2008-11-03 14:16
win_hate解析的很精辟
作者: szjrabbit    时间: 2008-11-03 18:43
学习了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2