2012-05-13 94 views
0

包含数据的我写了下面的代码什么类型的指针

int num = 3; 
int *ptr = # 

cout << *ptr << " " << ptr << endl; 

,得到了下面的输出。

3 0x7fff5fbff43c 

我想知道这是什么类型的数据。

0x7fff5fbff43c

一个。有符号浮点数据

b。带符号整数数据

c。无符号浮点数据

d。无符号整数数据

e。有符号字符数据

+9

f。以上都不是 – tmpearce

回答

6

它们都不是这些 - 它是一个指向整数的指针,它与任何描述中包含“数据”一词的类型不同。

0x7fff5fbff43c只是一个数字解释作为一个无符号整数数字打印出来的base-16。

+0

所以我们可以放心地假设它的选项d? – itsaboutcode

+2

@itsaboutcode尽管将指针指定为无符号十六进制整数是为人类读者直观显示它们的最常见方法,但从技术角度讲,指针*是无符号整数是不正确的。正确的答案是“这是一个用十六进制符号表示的无符号整数形式的指针”,所以从某种意义上说,“d”是最不正确的选择(但它仍然是不正确的)。 – dasblinkenlight

3

数据类型为int *。这不是你提到的任何事情。你也许可以将它投射到其中一个;但是,您是否可以做到这一点是未定义的,并且可能因平台和编译器而异。

对于显示,ostream的<<将转换为字符串。该字符串不直接对应于类型; operator<<调用ostream函数来传递字符数据,可以是单独的字符,字符串或其组合。

-1

它表示一个内存地址,而不是一个变量。所以它是无类型的。然而,你可以给它一个“间接类型”,这意味着这个指针指向的内存确实有一个类型(所以你可以指向int,字符,结构等)。

阅读indirection,这是一个有趣的概念。 f。

+0

指针不是无类型的。他们有类型。指针类型。 –

+0

@JamesYoungman他们不是“真实”的类型,他们是我的答案中提到的“间接类型”,因为他们描述的是指向底层内存的类型而不是指针本身。不过我们不要争论语义,如果需要的话,可以称它们为指针类型。 – Thomas

+0

@Thomas错误。 'ptr' *是*类型的变量*指向int的指针* – kotlomoy

相关问题