使用:
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是一个全局数组,所以当我在定义之后把它放到它之后它为什么不起作用?
答案 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