使用typedef进行多指针声明

时间:2013-09-10 14:45:45

标签: c++ pointers typedef

在C ++中,如果我们想要声明多个指针,我们会做这样的事情:int *a, *b, *c;我们必须在每个指针前放置一个星号*。如果我写这段代码:typedef int* ptr; ptr a,b,c;?他们都会成为指针,还是只是一个?

4 个答案:

答案 0 :(得分:5)

不,typedef不仅仅是文本替换的问题(就像宏一样)。

typedef int* ptr;

为类型int*引入了一个新名称“ptr”。

如果你写

ptr a, b, c;

所有a,b和c都具有相同的类型int*

请注意

const ptr p;

同样与

不一样
const int* p;

由于ptr是指针类型,const适用于指针;相当于

int* const p;

答案 1 :(得分:3)

嗯,有趣......让我们看看。说我不知道​​很多关于typedef的事情,我该怎么办?


答案:我自己测试一下。下面有一个代码可以回答你的问题:

#include <stdio.h>

typedef int* pointer_t;
pointer_t a1, b1, c1;
int* a2, b2, c2;

int main() {
  a1 = new int; // ok
  b1 = new int; // ok
  c1 = new int; // ok
  a2 = new int; // ok
  b2 = new int; // compile-time error
  c2 = new int; // compile-time error

  delete a1; // ok
  delete b1; // ok
  delete c1; // ok
  delete a2; // ok
  delete b2; // compile-time error
  delete c2; // compile-time error

  return 0;
}

结论: a1,b1和c1都是指针,但只有a2才是指针。

答案 2 :(得分:1)

是的,他们将成为指针:

typedef int* pointer_to_int;

int main()
{
    int a , b , c;
    pointer_to_int ptr_a , ptr_b , ptr_c;

    ptr_a = &a;
    ptr_b = &b;
    ptr_c = &c;

    *ptr_a = 1;
    *ptr_b = 2;
    *ptr_c = 3;

    std::cout << a << " " << b << " " << c;
}

输出结果为:

  

1 2 3

多数民众赞成因为typedef定义了type aliases。另一方面,如果您可以使用C ++ 11,我建议您使用using aliases而不是typedef,因为它的语法非常明确:

using ptr_to_int = int*;

并且也适用于模板别名:

template<typename T>
using vector_t = std::vector<T>;

答案 3 :(得分:0)

他们都是指针,typedefint*