在C ++中,如果我们想要声明多个指针,我们会做这样的事情:int *a, *b, *c;
我们必须在每个指针前放置一个星号*
。如果我写这段代码:typedef int* ptr; ptr a,b,c;
?他们都会成为指针,还是只是一个?
答案 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)
答案:我自己测试一下。下面有一个代码可以回答你的问题:
#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)
他们都是指针,typedef
是int*
。