在 C++ 中,如果我们想要声明多个指针,我们会这样做:int *a, *b, *c;
我们必须*
在每个指针前面加上一个星号。如果我写这段代码:typedef int* ptr; ptr a,b,c;
?它们都是指针,还是只是一个?
问问题
767 次
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
它们都将是一个指针,typedef
即int*
.
于 2013-09-10T14:48:57.507 回答