-1

作品:

int GlobalVar = 5;
int * LPVar[] = {&GlobalVar};

不起作用:

int GlobalVar = 5;
int * LPVar[]; // int * LPVar[1] doesn't work too

LPVar[0] = &GlobalVar; // errors here

------ 构建开始:项目:指针,配置:发布 Win32 ------ 正在编译... ilovpointers.cpp .\ilovpointers.cpp(9):错误 C2466:无法分配常量大小的数组 0 .\ilovpointers.cpp(9):错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int .\ilovpointers.cpp(9) : error C2040: 'LPVar' : 'int []' 在间接级别上与 'int *[1]' 不同。\ilovpointers.cpp(9 ) : error C2440: 'initializing' : cannot convert from 'int *' to 'int []' 没有对数组类型的转换,尽管有对数组的引用或指针的转换 构建日志保存在“file:// f:\Visual Studio C++\Project1\pointers\pointers\Release\BuildLog.htm" 指针 - 4 个错误,0 个警告 ========= 构建:

编辑:

我解决了,但有问题。

#include <iostream>
#include <stdio.h>

using namespace std;

int GlobalVar = 5;
int * LPVar[1];


void main()
{
    LPVar[0] = &GlobalVar;
    printf("%i", *LPVar[0]);

    cin.get();
}

LPVar 是一个全局数组,为什么当我把它放在定义之后它不起作用?

4

1 回答 1

2
  • 代码是否在文件范围内?

    鉴于更新的代码片段,答案似乎是肯定的。

  • 如果是这样,您就不能像LPVar[0] = &GlobalVar;在文件范围内那样进行随机分配。您只能在文件范围内拥有声明(没有初始化器)或定义(可选地带有初始化器)。

在您的问题中,这有效(确实应该如此),因为有两个带有初始化程序的变量定义。

int GlobalVar = 5;
int *LPVar[] = {&GlobalVar};

此代码不起作用(实际上它不应该),因为第三行是赋值语句而不是声明或定义:

int GlobalVar = 5;
int *LPVar[];          // Declaration, not definition
LPVar[0] = &GlobalVar; // Assignment is not allowed outside a function body

变体:

int GlobalVar = 5;
int *LPVar[1];         // Definition without initializer
LPVar[0] = &GlobalVar; // Assignment is not allowed outside a function body
于 2013-04-06T19:41:15.897 回答