使用gcc编译的代码将不会在visual studio 2012中编译

使用gcc编译的代码将不会在visual studio 2012中编译,c,visual-studio-2012,C,Visual Studio 2012,我对过程编程非常陌生,所以我不确定我的代码是否糟糕,或者我在VisualStudio中是否做错了什么 所以我有一段代码,它应该打印一个整数,打印它在内存中的位置,通过内存更改它的值,然后打印新的整数以及它在内存中的位置 它可以通过带有gcc的cmd进行编译和运行,但不能在visualstudio中进行 #include <stdio.h> int main(){ int a = 4; printf("Integer is: %d\n", a); printf

我对过程编程非常陌生,所以我不确定我的代码是否糟糕,或者我在VisualStudio中是否做错了什么

所以我有一段代码,它应该打印一个整数,打印它在内存中的位置,通过内存更改它的值,然后打印新的整数以及它在内存中的位置

它可以通过带有gcc的cmd进行编译和运行,但不能在visualstudio中进行

#include <stdio.h>

int main(){
    int a = 4;
    printf("Integer is: %d\n", a);
    printf("Integer is stored at: %p in memory\n", a);
    int *pointer = &a;
    *pointer = 3;
    printf("Integer is now: %d at %p in memory\n",a,*pointer);
    getchar();
    return 0;
}   
Visual studio在我尝试编译和运行时会出现以下错误:

第9行:错误C2065:“指针”:未声明的标识符

第9行:错误C2100:非法间接寻址

第11行:错误C2065:“指针”:未声明的标识符

第11行:错误C2100:非法间接寻址


Visual Studio C编译器不支持C99,尤其是不能在块中的任何位置声明变量。GCC支持C语言的几个版本。IIRC,将-std=c89作为一个标志传递给gcc也将标记这些。Visual Studio C编译器不支持C99,尤其是不能在块中的任何位置声明变量。GCC支持C语言的几个版本。IIRC,将-std=c89作为一个标志传递给gcc时,也会对它们进行标志。

printfInteger存储在内存中的:%p\n,a; 你需要把a的地址记为&a

printfInteger现在是:%d,位于内存中的%p处\n,一个,*指针; 您无需取消引用指针即可获得地址。 使用指针,而不是*指针

如果您使用的是C89或更早版本的编译器,则指针声明必须移动到块的顶部。不能在旧代码中声明变量。C.< /P> < P> PrimtFTEGER存储在:%p内存中\n,a; 你需要把a的地址记为&a

printfInteger现在是:%d,位于内存中的%p处\n,一个,*指针; 您无需取消引用指针即可获得地址。 使用指针,而不是*指针


如果您使用的是C89或更早版本的编译器,则指针声明必须移动到块的顶部。你不能在旧代码C.

< P>中用VS2012/C声明变量,你需要添加块来做你想做的事情,不幸的是编译器不支持中间

的声明。
int main(){
    int a = 4;
    printf("Integer is: %d\n", a);
    printf("Integer is stored at: %p in memory\n", a);
    {
      int *pointer = &a;
      *pointer = 3;
      printf("Integer is now: %d at %p in memory\n",a,*pointer);
    }
    getchar();
    return 0;
}  

或者,您可以通过指定文件上的/TP开关来强制将.c文件编译为.cpp文件。

对于VS2012/c,您需要添加块才能完成所需的操作,不幸的是,编译器不支持中间的声明

int main(){
    int a = 4;
    printf("Integer is: %d\n", a);
    printf("Integer is stored at: %p in memory\n", a);
    {
      int *pointer = &a;
      *pointer = 3;
      printf("Integer is now: %d at %p in memory\n",a,*pointer);
    }
    getchar();
    return 0;
}  

或者,您可以通过指定文件上的/TP开关,强制将.c文件编译为.cpp文件。

我认为您应该首先在函数顶部声明变量,当您使用%p打印内存地址时,您应该给出要打印的变量的地址

试试这个

int main()
{
    int a = 4;
    int *pointer=&a;
    printf("Integer is: %d\n", a);
    printf("Integer is stored at: %p in memory\n",&a);
    *pointer = 3;
    printf("Integer is now: %d at %p in memory\n",a,pointer);
    getchar();
    return 0;
}

我认为您应该首先在函数顶部声明变量,当您使用%p打印内存地址时,您应该给出要打印的变量的地址

试试这个

int main()
{
    int a = 4;
    int *pointer=&a;
    printf("Integer is: %d\n", a);
    printf("Integer is stored at: %p in memory\n",&a);
    *pointer = 3;
    printf("Integer is now: %d at %p in memory\n",a,pointer);
    getchar();
    return 0;
}

你的意思是,两个不同版本的C是不同的?没有一个C。。。规范有几个不同的版本/迭代,每个版本/迭代都有各自的功能。这可能会有所帮助:Visual Studio可能会抱怨您没有遵循ANSI C标准:您不能在任何语句下声明任何新变量。如果你想切换到C99或C++,你也要说,C的两个不同版本不同吗?没有一个C。。。规范有几个不同的版本/迭代,每个版本/迭代都有各自的功能。这可能会有所帮助:Visual Studio可能会抱怨您没有遵循ANSI C标准:您不能在任何语句下声明任何新变量。如果你想,切换到C99或C++。请参见:1的解释在哪里?你说的是对的,我也不理解-1。你说得对,我也不明白-1的意思+从我这里得到1。