C++指针查询
C++ pointers query
这是我非常简单的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]
是一样的。
- Mongodb c++驱动程序:如何查询元素的数组
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 查询SQLite数据库中的日期
- 数组的指针从不分段故障
- 我可以查询是否是动态分配数组中的第一个指针
- 有关C++中的指针的查询
- C++指针查询
- 基于指针的查询
- 来自新手用户的共享指针查询.我下面的代码在使用带有成员共享指针的类容器时崩溃
- 指针基础:一个简单的查询
- 如何向上查询或向下查询接口指针
- C++指针查询
- 查询指针解引用
- 指针增量查询