这个带向量的简单代码有什么问题?

时间:2014-02-12 06:17:50

标签: c++ variables pointers

以下代码是我为自己编写的代码,用于测试指针和向量的工作方式。

我是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];
}

编译时我遇到了一大堆错误。

有人可以帮忙吗?请记住,我只能理解新手。

6 个答案:

答案 0 :(得分:4)

问题在于这一行:

int* a, b, c;

aint*,但bc仅为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;

基本上,只有aint *; bc只是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;