指针的类型

时间:2014-02-23 02:25:19

标签: c++ pointers

我是 C ++ 的新手,当我正在阅读麻省理工学院有关指针的讲义时,我发现了一些奇怪的东西:

  

指针只是存储整数的变量 - 但是那些整数   碰巧是内存地址,通常是其他变量的地址。   存储一些变量x的地址的指针被认为是指向的   到x。我们可以通过取消引用指针来访问x的值。

以及我发现指针可以有一个类型:

int *pointer ; 
char * pointer ; //example 

好吧它只是说它是一个 int ,如果它只是持有对它的引用而不是实际值,那么为什么要给它与它所指向的东西相同的类型?

2 个答案:

答案 0 :(得分:1)

也许你有一个int数组。和“意外地”......数组变量是指向该数组的第一个组件的指针。有了指针类型为int的知识,编译器知道它必须跳到下一个数据的距离。

int a[4] = { 0, 1, 2, 3 };

// Dereferenced pointers to an int with additonal offset of size int n times
printf("%i\n", *a);
printf("%i\n", *(a+1));
printf("%i\n", *(a+2));
printf("%i\n", *(a+3));

// Equivalent to using the array as usual
printf("%i\n", a[0]);
printf("%i\n", a[1]);
printf("%i\n", a[2]);
printf("%i\n", a[3]);

这是一个高级示例,但它是int指针很少使用的一种。通常,您将拥有指向对象,结构或数组的指针 - 很少使用值类型。但是在算法的某些实现中,指向值类型的指针可用于在数组中进行排序,搜索等

答案 1 :(得分:0)

因为指针的大小取决于您正在编写的程序的结构。在32位环境中,指针的大小为32位,您可以使用int将内存位置填充到reinterpret_cast。但是如果你的程序是64位,则指针的大小是64位,不适合32位整数。但你仍然可以reinterpret_cast将指针变成64位整数,对吗?嗯......是的 - 但我还没有完成。

除了构建配置文件之外,最终的原因与您不将每个指针存储为void*的原因相同。它可以指向任何类型的对象,如果你不完全确定它是什么类型的变量,它会很有用,但几乎不可能知道变量实际存储的内容。

相关问题