5

在 C++ 中,如果我们想要声明多个指针,我们会这样做:int *a, *b, *c;我们必须*在每个指针前面加上一个星号。如果我写这段代码:typedef int* ptr; ptr a,b,c;?它们都是指针,还是只是一个?

4

4 回答 4

5

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

typedef int* ptr;

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

如果你写

ptr a, b, c;

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

注意

const ptr p;

同样不一样

const int* p;

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

int* const p;
于 2013-09-10T14:49:43.540 回答
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 是指针。

于 2013-09-10T14:59:00.947 回答
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定义了类型别名。另一方面,如果您可以使用 C++11,我建议您使用using aliases而不是typedef,因为它的语法非常清晰:

using ptr_to_int = int*;

也适用于模板别名:

template<typename T>
using vector_t = std::vector<T>;
于 2013-09-10T14:49:48.173 回答
0

它们都将是一个指针,typedefint*.

于 2013-09-10T14:48:57.507 回答