定义指针类型 C++

问题描述 投票:0回答:1

我正在编写一个使用指针的小程序,并遇到了奇怪的编译器行为。

第一个案例:

#include <iostream>
#include <typeinfo>


int main(int argc, char** argv)
{
    int* a,b;
    
    std::cout << typeid(&a).name() << std::endl;
    std::cout << typeid(&b).name() << std::endl;

    return 0;
}

第一种情况,程序输出将是这样的:

PPi
Pi

据我所知,这意味着指向“a”的指针将是“int**”类型,而指向“b”的指针将是“int*”类型 这对我来说似乎很奇怪,我不明白为什么它会这样工作。

第二种情况:

#include <iostream>
#include <typeinfo>


int main(int argc, char** argv)
{
    int* a;
    int* b;

    std::cout << typeid(&a).name() << std::endl;
    std::cout << typeid(&b).name() << std::endl;

    return 0;
}

第二个输出:

PPi
PPi

在这种情况下,指针接收理论上应该在第一种情况下接收的类型。 我不知道在哪里可以找到这方面的信息。我学C++的书里根本没有这方面的内容。

c++ pointers gcc memory
1个回答
0
投票

声明语法由声明说明符后跟声明符列表组成。

在您的情况下,您有简单类型说明符

int
和两个声明符的列表:
*a
b

*
前缀将第一个声明符变成指针声明符

因此,如果你希望它们都是指针声明符,你可以这样写:

int *a, *b;
© www.soinside.com 2019 - 2024. All rights reserved.