我正在编写一个如下所示的 C 程序,其中我将一个值分配给一个由全局指针指向的变量,该指针正在被赋值右侧的函数调用更改。
但是变化发生在它之前指向的位置。因此,对于以下代码,它会打印
"GP:5 P:5 GPV:11" ,
它应该在哪里
“GP:10 P:10 GPV:9”
我试过用-O2和-O0编译它。相同的输出。
我知道如果我将作业分成两行,它是固定的。但是我正在做的项目有很多这样的地方。
这是否可以让它像我想要的那样工作而不把它分成两行?
任何建议都受到高度赞赏。
#include <stdio.h>
int * gp;
// volatile int *gp; // I tried these two.
// int * volatile gp; // Didn't help.
int func(int *p)
{
*p = 5;
gp = p;
return *p;
}
int main()
{
int p = 7;
int gp_v;
gp = &gp_v;
*gp = 8;
*gp = func(&p) + *gp;
gp_v ++;
printf("GP:%d P:%d GPV:%d\n", *gp, p, gp_v);
return(0);
}