方案一:
#include <stdio.h>
#define foo(x, y) #x #y
int main()
{
printf("%s\n", foo(k, l)); //prints kl
return 0;
}
Run Code Online (Sandbox Code Playgroud)
方案2:
#include <stdio.h>
#define foo(m, n) m ## n
int main()
{
printf("%s\n", foo(k, l)); //compiler error
}
Run Code Online (Sandbox Code Playgroud)
为什么两个程序的输出会有如此大的差异?这两个程序之间的确切区别是什么?
int a = 5;
int *p = &a;
printf("%d\n\n", ++*p);
printf("%d\n", *p++);
Run Code Online (Sandbox Code Playgroud)
++*p相当于++(*p).但是*p++增加指针,而不是p指向的值.但我无法理解为什么我的代码中的printf语句显示相同的值"6".这背后有什么具体的逻辑吗?
在详细研究malloc()时,我遇到了这种奇怪的行为.
int *p;
p=(int*)malloc(10.45);
p=(int*)malloc(10.45f);
p=(int*)malloc('j');
Run Code Online (Sandbox Code Playgroud)
程序只使用警告编译任何这些语句并返回有效地址.这里真正的结果是什么?