指向 int 数组的指针,从另一个方法传递和使用它

Pointer to int array, passing and using it from another method

本文关键字:方法 另一个 数组 int 指针 指向      更新时间:2023-10-16

我没有巩固我对C++数组的学习,也忘记了如何正确地做到这一点。我以前用字符数组做过,但它对 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 中的变量。

int myIntArray[10];

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

int *pMyArray = myIntArray

好的,pMyArray指向myIntArray中的第一个元素。

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

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

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

anotherMethod(int *& pMyArray)

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

int myIntArray[10];

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

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

除此之外,您的方法只是将本地数组与你传递的数组的第一个 vale 一起分配。
你到底想做什么?我不确定。

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; 

这里有一些错误。

首先,零(非空值)数组是使用初始值设定项语法实现的:

int myIntArray[10] = {0};

其次,int myLocalArray[];的大小为 0。即使它的大小确实为 10,写myLocalArray[0] = *pMyArray;也会将第一个 int 从 pMyArray 分配到 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);
}
相关文章: