C++指针查询

C++ pointers query

本文关键字:查询 指针 C++      更新时间:2023-10-16

这是我非常简单的C++指针介绍性代码,

#include <iostream>
int main(int argc, const char* argv[])
{
    int *p = 0, numbers[5];
    *p = 10;
    *(p+1) = 20;
    *(p+2) = 30;
    *(p+3) = 30;
    *(p+4) = 40;
    for (int i = 1; i < 5; i++)
        numbers[i] = *(p + i);
    for (int i = 1; i < sizeof(numbers); i++)
        std::cout << numbers[i] << 'n';
    return 0;
}

我在 Xcode 中运行它,它显示"构建成功",但给了我堆栈输出,并没有向我显示实际结果。

在取消引用之前p指向有效的内存位置

p = numbers;

而且,不需要以下内容。

for(int i=1;i<5;i++)
    numbers[i]=*(p+i);

此外,i在 for 循环中应以 0 开头

指针是存储数字的变量,就像任何其他变量一样,但是由于您告诉编译器它是一个指针,编译器允许您使用该值作为内存中事物的地址,并且该语言提供"取消引用"作为表示"此变量描述的地址的值"的一种方式。

想象一下,你要去机场赶飞机。你拿起一张便利贴,写下你的航班号,然后随身携带第二张便利贴到你的登机口。

第一个帖子是"flight*"指针

,第二个帖子是"门*",但现在门*指针是空的。

当您到达机场时,您可以在板上查找您的航班并记下登机口号码。"3A"。现在您的大门*便利贴有效。

但便利贴本身不是你的登机口,它只是指向它:你仍然必须"取消引用"便利贴才能到达你的航班——也就是说,穿过机场走到 3A 号登机口:)

在编程中,变量不能为空,因此已经同意地址为 0 的指针是"null"和"非法"。程序在尝试使用空指针时崩溃。按照惯例,C 中有一个名为"NULL"的宏,旨在将"空指针"与值 0 区分开来。C++继承了这一点,但在 C++11 中,他们引入了一个新的常量"nullptr"。

您的代码以以下内容打开:

int *p = 0;

这吸引了很多人。它看起来与我们通过指针分配时的语法相同:

*p = 10;

但实际发生的是,您正在声明一个类型为"int *"的变量 p,并为 p 赋值,而不是 *p。

int *p;
p = 0;
*p = 10;

您需要将"p"指向一些整数以进行存储,或者:

p = numbers;

但这会使 P 指向与数字相同的存储。但是,然后意识到,像这样的操作

numbers[i] = *(p+i);

现在是多余的——if (p == numbers)那么*(p+i)和说numbers[i]是一样的。