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++:在没有解引用运算符的情况下访问“数组指针”的值?的主要内容,如果未能解决你的问题,请参考以下文章