并排定义指针并键入问题

时间:2015-01-22 17:05:52

标签: c++ pointers

所以代码:

int *mine, *yours; // note this declaration 
mine = new int;
yours = mine;
*yours = 8;
delete yours;
*mine = 12;
mine = NULL;

我们可以定义指针吗,你这样吗?这段代码有什么问题吗?

此外,

size_t length = 47;
int* plength = &length;

这段代码好吗?

2 个答案:

答案 0 :(得分:2)

  

我们可以定义指针吗,你这样吗?

是。如果你不能,编译器就会抱怨。

  

这段代码有什么问题吗?

是。两个指针都指向同一个对象,您可以通过mine删除后通过yours访问该对象。访问已删除对象的残余会产生未定义的行为。

  

这段代码好吗?

不,大概是编译器告诉你的。 size_tint是不同的类型,因此int*指针不能被赋予size_t对象的地址(没有邪恶的演员)。

答案 1 :(得分:0)

  

我们可以定义指针吗,你这样吗?这段代码有什么问题吗?

绝对没问题。我建议您以这种方式使用相同类型的指针声明时可以使用typedef以获得更清晰的信息,

typedef int *p_int;
p_int yours, mine; // Both members are pointers to integer type

size_t& int具有不同的类型,其中整数指针plength只能指向整数成员的地址而不能指向其他成员。