0

我还没有巩固我对 C++ 数组的学习,也忘记了如何正确地做到这一点。我之前用 char 数组完成了它,但它不适用于 int 数组。

我声明了一个新的空白 int 数组:

int myIntArray[10];

所以这应该是一个空数组,对吗?

然后我分配一个指向这个数组的指针:

int *pMyArray = myIntArray

希望那是正确的。

然后我将它传递给其他地方的另一个方法:

anotherMethod(pMyArray)

我想将此指针分配给局部变量(这是我真的不确定的地方):

anotherMethod(int *pMyArray){    
    int myLocalArray[];    
    myLocalArray[0] = *pMyArray;    
}

我没有收到任何编译错误,但我不确定这在某些方面是否正确。对此表示赞赏的任何和所有帮助和建议。

编辑:

我应该说我想做的事。

真的很简单,我只想从另一种方法修改本地数组。

所以我有:

方法 1 将包含:

int myArray1[10] = {0};

方法 2 将指针传递给 myArray:

然后是一些代码来修改数组 myArray 中的变量。

4

4 回答 4

1
int myIntArray[10];
So this should be an array of nulls for the moment correct?

不正确,它是一个包含 10 个未初始化整数的数组。

int *pMyArray = myIntArray
Hopefully thats correct to there.

不太正确,pMyArray 是指向第一个元素 myIntArray[0] 的指针。

我想将此指针分配给局部变量(这是我真的不确定的地方):

如果您确实需要分配指针,则必须使用此代码

int *p_myLocalArray;    
p_myLocalArray = pMyArray; 
于 2012-04-23T15:17:57.177 回答
1

这里有几个错误。

首先,零数组(非空值)是通过使用初始化语法来实现的:

int myIntArray[10] = {0};

其次,int myLocalArray[];大小为 0。即使它的大小确实是 10,写入myLocalArray[0] = *pMyArray;也会将第一个 int 分配到pMyArrayinto mLocalArray,这不是你的意思。

如果要分配数组的指针,则只需:

int *myLocalPointer;
myLocalPointer = pMyArray;

如果您想要数组的本地副本,则需要在本地复制它,为此您还需要大小和动态分配:

void anotherMethod(int *pMyArray, int size){    
    int *myLocalArray = (int *)malloc(size * sizeof(int));
    memcpy(myLocalArray, pMyArray, size * sizeof(int));

    ...
    free(myLocalArray);
}
于 2012-04-23T15:18:48.197 回答
1
int myIntArray[10];

所以这应该是一个空数组,对吗?

不,这是一个10整数数组,其中包含取决于存储规范的值。
如果在本地创建,它具有随机垃圾值。
如果在全局范围内创建,它是初始化值,对于 POD 初始化为零。

除此之外,您的方法只是将本地数组分配给您传递的数组的第一个值。
你到底想做什么?我不知道。

于 2012-04-23T15:14:17.553 回答
1
int myIntArray[10];

这是一个未初始化的数组。它不一定包含0's。

int *pMyArray = myIntArray

好的,pMyArray指向myIntArray.

anotherMethod(int *pMyArray){    
    int myLocalArray[10];    
    myLocalArray[0] = *pMyArray;    
}

这不会将您的指针分配给任何东西,它将本地数组的第一个值分配给int指向的 by pMyArray,记住,它是未初始化的。我在10那里添加了,因为你不能在 C++ 中有一个未知大小的数组。

要修改pMyArray指向的内容,您需要通过引用传递它:

anotherMethod(int *& pMyArray)

此外,如果您将其分配给自动存储中的某些值,则会导致未定义的行为,因为该内存在函数退出时不再有效。

于 2012-04-23T15:14:36.473 回答