相关疑难解决方法(0)

将C++指针视为内存地址的可接受程度如何?

当你学习C++时,或者至少当我通过C++ Primer学习它时,指针被称为它们指向的元素的"内存地址".我想知道这是多少.

例如,做两个元素*p1*p2拥有属性,p2 = p1 + 1或者p1 = p2 + 1 当且仅当它们在物理内存中相邻时?

c++ hardware pointers

41
推荐指数
5
解决办法
2226
查看次数

使用关系运算符比较指针意味着什么?

如果我有两个指针变量a和b,使用语句"a <b"是什么意思?这样做应该比较他们的内存地址的值?如果是这样,计算机中的内存地址顺序是什么?

c c++ pointers relational operators

7
推荐指数
1
解决办法
494
查看次数

关于指针比较,标准中的措辞比较奇怪

§6.5.8\ 6(关于>,<,<=,> =)

如果表达式P指向数组对象的元素并且表达式Q指向同一数组对象的最后一个元素,则指针表达式Q + 1比P大.在所有其他情况下,行为未定义.

上面的几节,§6.5.8,基本上解释了指针算法在数组上的预期工作.那int a[3]; int *p = a; int *q = &a[2]; //q-p == 3是有效的.但是,正如我上面读到的那样q > p是UB.

我错过了什么?

c pointers language-lawyer c11

5
推荐指数
1
解决办法
249
查看次数

为什么我们无法比较不指向同一数组中元素的指针?

我一直在学习C语言,并跟随Yashavant P. Kanetkar的"Let Us C".

指针章节中有一行说我们只能比较指向同一数组中元素的指针,即小于(<)和大于(>)指针.

为什么比较任意指针无效?

c arrays pointers pointer-arithmetic

5
推荐指数
2
解决办法
372
查看次数

为什么C++不允许从有效地址和类型创建有效指针?

如果你知道两条信息:

  1. 内存地址.
  2. 存储在该地址中的对象类型.

然后你逻辑上拥有引用该对象所需的一切:

#include <iostream>
using namespace std;

int main()
{
    int x = 1, y = 2;
    int* p = (&x) + 1;
    if ((long)&y == (long)p)
        cout << "p now contains &y\n";
    if (*p == y)
        cout << "it also dereference to y\n";
}
Run Code Online (Sandbox Code Playgroud)

但是,根据C++标准,这是不合法的.它适用于我尝试过的几个编译器,但它是未定义的行为.

问题是:为什么?

c++

2
推荐指数
2
解决办法
181
查看次数