C语言中的#作用

来源:百度知道 编辑:UC知道 时间:2024/05/16 15:02:33
有这样一句:
printf("%s,%#p,%#p",str1,str2,str3)
还有:
#define FUN(a) cout<<#a;
这些语句中的#是什么意思 啊?

在printf中的%后面的那个#是用来格式说明的,
如果在g,G,f,e或者E代码前加一个#,可以确保显示一个小数点(即使没有小数位),
在o之前加上则输出八进制,
在p,x或者X之前则确保输出十六进制

例如上面的那个就是把地址按照十六进制形势输出.

在编译时,#的作用是,把后面的变元转化为带引号的串.
例如上面的#define FUN(a) cout<<#a;代表的就是把a当作一个字符串输出,比如FUN(123\n);将会输出123以及一个回车.

##的作用才是在编译的时候把前后连接起来.
例如:
#include <stdio.h>
#define concat(a,b) a##b
int main(void)
{
int xy=10;
printf("%d",concat(x,y));
//即是: printf("%d",xy);
return 0;
}

经在VC6中测试,在printf中的#好像没有用。在cout中的#把前后连接起来,结果输出FUN的参数(参数名称本身,不是它的值)。