分配值的指针数组

时间:2013-04-06 19:33:02

标签: c++

使用:

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

不起作用:

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

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

------ Build build:项目:指针,配置:发布Win32 ------编译... ilovpointers.cpp。\ ilovpointers.cpp(9):错误C2466:无法分配数组常数0   。\ ilovpointers.cpp(9):错误C4430:缺少类型说明符 - int   假定。注意:C ++不支持default-int。\ ilovpointers.cpp(9)   :错误C2040:'LPVar':'int []'的间接级别不同   来自'int * [1]'。\ ilovpointers.cpp(9):错误C2440:'初始化':   无法从'int *'转换为'int []'           没有对数组类型的转换,尽管有对引用的转换或指向数组的指针构建日志已保存在   “file:// f:\ Visual Studio   C ++ \ Project1 \ pointers \ pointers \ Release \ BuildLog.htm“指针 - 4   错误,0警告   ==========构建:0成功,1个失败,0个最新,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是一个全局数组,所以当我在定义之后把它放到它之后它为什么不起作用?

1 个答案:

答案 0 :(得分: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