以下代码是我为自己编写的代码,用于测试指针和向量的工作方式。
我是C ++的新手。
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
//Create the integer pointer vector, and clean it to initialize
vector<int *> lol;
lol.clear();
//Create the pointers and point them to 1,2,3
int a1=1, a2=2, a3=3;
int* a, b, c;
a=&a1;
b=&a2;
c=&a3;
//Put the pointers into the vector
lol.push_back(a);
lol.push_back(b);
lol.push_back(c);
//Return the value of the middle pointer
cout << *lol[1];
}
编译时我遇到了一大堆错误。
有人可以帮忙吗?请记住,我只能理解新手。
答案 0 :(得分:4)
问题在于这一行:
int* a, b, c;
a
为int*
,但b
和c
仅为int
。
int *a, *b, *c;
将全部int*
s。
int* a;
int* b
int* c;
做同样的事情,但有更明确的意图声明三个int*
。
请参阅:Placement of the asterisk in pointer declarations
更新:更好:
int* a = &a1;
int* b = &a2;
int* c = &a3;
无论何时,都不要将变量初始化及其声明分开。
答案 1 :(得分:0)
在一行上声明多个指针时,必须在每个指针变量前面指定*符号。
int * a, b, c;
应该是:
int *a, *b, *c;
该行:
int * a, b, c;
被解释为:
int *a;
int b;
int c;
答案 2 :(得分:0)
更改此
int* a, b, c;
到
int *a, *b, *c;
在您的声明中,您宣布
a as pointer to int
b as int
c as int
答案 3 :(得分:0)
如果声明变量,请不要在同一行声明多个变量。
你认为你做的是声明三个指向int的指针。你做了什么,是宣布三个整数,其中一个是指针:
int* a, b, c;
装置
int *a; int b; int c;
将*视为属于变量名称。不直观,但这就是语言的运作方式。
您想要将所有三个声明为指针:
int* a;
int* b;
int* c;
答案 4 :(得分:0)
其他人已经注意到的主要问题是这里的定义:
int* a, b, c;
基本上,只有a
是int *
; b
和c
只是int
s。
最好每行一个变量定义:
int* a = &a1;
int* b = &a2;
int* c = &a3;
如果您使用这些原始指针,并且由于某种原因您想先定义它们然后再分配它们的值,请至少考虑初始化它们到nullptr
(或{{ 1}}如果您使用的是C ++ 98/03):
NULL
此外,还可以为您的代码做出其他说明:
// Initialize to NULL/nullptr, to avoid pointers pointing to junk memory int* a = nullptr; int* b = nullptr; int* c = nullptr; .... // assign proper values to pointers...
由于这是 C ++ - 而非C - 您可以省略int main(void)
,而只需使用(void)
:
()
创建int main()
时:
vector
在向量定义之后你不需要调用它的vector<int *> lol;
lol.clear();
方法:实际上,vector的默认构造函数(当你在第一行定义向量时由编译器隐式调用) )已经将向量初始化为空向量
这很好:
clear()
考虑到这些注释,您的代码可以这样编写:
vector<int *> lol; // Creates an empty vector
答案 5 :(得分:0)
第一个问题是指针的声明
int* a, b, c;
这将创建一个as指针和b&amp; c为int。
使用
之类的声明 int* a,*b,*c;
在访问vector的元素时,使用vector的.at()方法。
cout << *lol.at(0) << endl;