【发布时间】:2011-05-12 23:11:27
【问题描述】:
所以我试图理解两件事:
- 这三种表达方式有什么区别?
- 第一个表达式 (A) 的等价物是什么?
这里是代码(固定):
#include "stdafx.h"
void someFunc(double** pArray, int length)
{
for(int i = 0; i < length; i++)
{
//this works perfectly
double expressionA = *(*pArray + i);
//this crashes : Unhandled exception at 0x00da13ff in pptrtest.exe: 0xC0000005: Access violation reading location 0xcccccccc.
double expressionB = **(pArray + i);
//this crashes : Unhandled exception at 0x00da13ff in pptrtest.exe: 0xC0000005: Access violation reading location 0xcccccccc.
double expressionC = *pArray[i];
}
}
int main()
{
double arr[] = { 1, 2, 3, 4, 5 };
double* pArr = arr;
someFunc(&pArr, sizeof arr / sizeof arr[0]);
return 0;
}
【问题讨论】:
-
如果您添加代码以显示您如何为 ppDoubleArray 分配内存会更好。这将使回答您问题的人更好地了解您在做什么。
-
您的意思是
+ i,而不是+ 1? -
如果您说出“这崩溃”是什么意思,这也会有所帮助。有什么东西会爆炸吗?是否有异常或错误消息?如果您不打算提供所有代码,至少提供一个特定错误描述。 “这崩溃了”在大多数情况下是没有意义的。
标签: c++ pointers pointer-arithmetic