前天,论文答辩被怼成了狗。后10%稳稳地,今天,开始C语言回炉,因为论文需要,所以重新学习一下。
以前学习的时候,就没有弄清楚指针,现在一看到*和&就可开始迷糊。
今天,分享一下指针的一个陷阱,代码如下:
#include
# define a *p
# define b *q
int main(void)
{
int x;
int *p , *q;/*定义两个指针*/
p=&x;
q=&x; /*两个指针指向同一块区域*/
a=2;
b=3;
printf("the value is :%d\n",a+b);
return 0;
}
截图如上,居然2+3=6出现了?其实,原理是这样的:a和b实际上是同一个内存区域的两个别名。那么,对其赋值相当于对同一个变量赋值,之前的赋值就会被覆盖,也就是此时a=3,b=3。
在C++当中,也有非常类似的用法:共用体。举个例子:
#include
using namespace std;
int main()
{
union data
{
char a;
char b;
};
data x;
x.a ='W';
cout |
|