C++:在没有解引用运算符的情况下访问“数组指针”的值?

Posted

技术标签:

【中文标题】C++:在没有解引用运算符的情况下访问“数组指针”的值?【英文标题】:C++: Accessing the values of an "array pointer" without the dereferencing operator? 【发布时间】:2021-04-05 20:06:25 【问题描述】:

抱歉,如果这个问题已经被问过,但是关于 C++ 数组和指针的问题太多了,我可以一一解答。

假设我们像这样声明一个双精度数组:

double val[3] = -3.1415, 6.2430, +37;

// Declare and initialize pointer variable: 
double * pointer = &val[0]; 
cout << "Elements of the array are: " << endl; 
cout << pointer[0] << " " << pointer[1] << " " << pointer[2] << endl; 

让我感到困惑的是,我如何获得存储在双精度数组val 中的正确值作为输出,而不必使用解引用运算符 *,例如*pointer[0]..

【问题讨论】:

operator[]() 只是一个内存偏移操作。这就是它对常规数组的工作方式,也是它对指针的工作方式。 a[b] 的定义与*(a + b) 相同,所以有你的* 您想要这个:https://ideone.com/6iuoAf 吗?我对你在问什么问题感到困惑。 对于像 MyArray[Index] 这样的 c 样式数组,相当于 *(MyArray + Index),因此您可以使用(内置)* 运算符取消引用 @UlrichEckhardt 请问:为什么指针[1] 表示*(pointer + 1)?这是它的编码方式吗?谢谢。 【参考方案1】:

pointer 指向压缩双精度数组中的第一个双精度。

pointer[1] 意味着 *(pointer+1) 的基本方式非常荒谬,以至于 1[pointer] 有效。 (顺便说一句,不要那样做)

如果你有一个数据数组,那么在指向第一个元素的指针上加 1 会得到指向第二个元素的指针。

【讨论】:

请问:为什么pointer[1] 就是*(pointer + 1)?这是它的编码方式吗?谢谢。 还有:*(pointer + 1)这个表达式怎么理解?我会将其重写为*pointer + *1 = val[0] + *1,但*1 是什么? 您的重写无效。指针上的算术(加/减)遵循特殊规则,它以指针类型的倍数运行。所以,pointer + 1 会给你下一个对象的地址。即使 C++ 也使用 * 进行乘法运算,但这并不意味着您可以在取消引用时应用对乘法有效的规则。

以上是关于C++:在没有解引用运算符的情况下访问“数组指针”的值?的主要内容,如果未能解决你的问题,请参考以下文章