2014-02-12 98 views
1

以下代码是我为自己编写的代码,用于测试指针和向量如何工作。这个带有向量的简单代码有什么问题?

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

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

任何人都可以帮忙吗?请记住,我只能了解新手。

+2

您不需要在声明后立即清除。 –

+0

请记住将来发布完整的错误文本。 – chris

回答

0

在一行上声明多个指针时,必须在每个指针变量前面指定*符号。

int * a, b, c; 

应该是:

int *a, *b, *c; 

线:

int * a, b, c; 

被解释为:

int *a; 
int b; 
int c; 
4

问题是与这一行:

int* a, b, c; 

aint*,但bc只是int秒。

int *a, *b, *c; 

会使这一切int* s。

int* a; 
int* b 
int* c; 

做同样的事情,但宣布3个int* S的更清晰的意图。

参见:Placement of the asterisk in pointer declarations

UPDATE:更妙的是:

int* a = &a1; 
int* b = &a2; 
int* c = &a3; 

每当你可以,不分开变量初始化及声明。

0

更改此

int* a, b, c; 

int *a, *b, *c; 

在你的宣言您声明

a as pointer to int 
b as int 
c as int 
0

如果声明变量,不要在同一行声明多个变量。

你以为你做了什么就是向int声明三个指针。你做了什么,是声明了三个整数,指针其中之一:

int* a, b, c; 

意味着

int *a; int b; int c; 

想到的*为属于变量名。不直观,但这是语言运作的方式。

要声明的所有三个作为指针:

int* a; 
int* b; 
int* c; 
0

主要问题,因为别人已经指出的,在这里的定义:

int* a, b, c; 

基本上,只有aint *; bc只是int s。

这只是最好有每行一个变量定义:

int* a = &a1; 
int* b = &a2; 
int* c = &a3; 

如果使用这些原始指针,如果由于某种原因,你要首先定义它们,然后再指定它们的值,考虑至少初始化他们nullptr(或NULL如果使用的是C++ 98/03):

// 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... 

此外,还有可以为你的代码进行其他注意事项:

int main(void) 

由于这是C++ - 不是C - 你可以省略(void),而只使用()代替:

int main() 

当您创建vector

vector<int *> lol; 
lol.clear(); 

你不需要矢量定义之后调用其clear()方法:其实,矢量的默认构造函数(编译器隐式调用时你定义第一行中的矢量)已经将矢量初始化为空的矢量。
这只是罚款:

vector<int *> lol; // Creates an empty vector 

考虑到这些笔记,您可以编写代码是这样的:

#include <iostream> 
#include <vector> 
using namespace std; 

int main() 
{ 
    vector<int *> lol; 

    int a1 = 1; 
    int a2 = 2; 
    int a3 = 3; 

    int * a = &a1; 
    int * b = &a2; 
    int * c = &a3; 

    lol.push_back(a); 
    lol.push_back(b);  
    lol.push_back(c); 

    cout << *lol[1] << endl; 
} 
0

第一个问题是在指针声明

  int* a, b, c; 

这将创建一个指针和b & c作为整数。

使用声明等

  int* a,*b,*c; 

而当访问向量使用.AT的元素()载体的方法。

  cout << *lol.at(0) << endl;