指针的类型

Hes*_*del 5 c++ pointers

我是C++的新手,因为我正在阅读麻省理工学院关于指针的讲义,我认识到一些奇怪的东西:

指针只是存储整数的变量 - 但这些整数恰好是内存地址,通常是其他变量的地址.存储某个变量x的地址的指针被称为指向x.我们可以通过解除引用指针来访问x的值.

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

int *pointer ; 
char * pointer ; //example 
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*nck 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]);
Run Code Online (Sandbox Code Playgroud)

这是一个高级示例,但它是 int 指针很少使用的示例之一。大多数情况下,您将拥有指向对象、结构或数组的指针——很少指向值类型。但在算法的某些实现中,指向值类型的指针对于数组中的排序、搜索等很有用