今天朋友问到一个问题,例如下面的代码:

#include <stdio.h>

int main() {
    typedef int* testPtr;
    int i = 7;
    int* p = &i;
    printf("first time *p is %d, i is %d\n", *p, i);
    testPtr &q = p;
    printf("second time &q=p *q is %d, *p is %d, i is %d\n", *q, *p, i);
    *q = 70;
    printf("third time *q = 70 *q is %d, *p is %d, i is %d\n", *q, *p, i);
    return 0;
}

输出的结果为:

 

 

如果把同样的文件test.cpp 改为test.c 编译的结果如下:

 

编译不过,同时我将testPtr &q = p; 改为int* &q = p;  报同样的错误

 

结论:testPtr &q = p;    在C++中才合法,其中q是p的别名,所以才有上面的结果

 

补充一下在ubuntu里安装g++的过程

sudo apt-get install g++ 提示如下错误:

于是按照如下解决:

<1>sudo apt-get install aptitude

<2>sudo aptitude install g++

终端中输入后会提示aptitude给出的解决方案,你可以选择no,会继续提供下一个解决方案,一般前面的方案会是忽略掉依赖冲突,所以想要彻底解决的话可以跳过前面的几种方案,然后再yes解决