指向int数组的指针,从另一个方法传递并使用它 我还没有巩固我对C++数组的学习,忘记了如何正确地完成这些操作。我以前用过char数组,但它对int数组不起作用

指向int数组的指针,从另一个方法传递并使用它 我还没有巩固我对C++数组的学习,忘记了如何正确地完成这些操作。我以前用过char数组,但它对int数组不起作用,c++,C++,我声明一个新的空白int数组: int myIntArray[10]; 这应该是一个空数组,对吗 然后我将一个指针分配给该数组: int *pMyArray = myIntArray 希望这是正确的 然后我将其传递给其他地方的另一种方法: anotherMethod(pMyArray) 我想把这个指针分配给一个局部变量(我真的不确定): 我没有得到任何编译错误,但我不确定这在一些方面是正确的。感谢您的帮助和建议 编辑: 我应该说出我想做的事 非常简单,我只想从另一个方法修改一个本地数组 因

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

int myIntArray[10];
这应该是一个空数组,对吗

然后我将一个指针分配给该数组:

int *pMyArray = myIntArray
希望这是正确的

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

anotherMethod(pMyArray)
我想把这个指针分配给一个局部变量(我真的不确定):

我没有得到任何编译错误,但我不确定这在一些方面是正确的。感谢您的帮助和建议

编辑:

我应该说出我想做的事

非常简单,我只想从另一个方法修改一个本地数组

因此,我:

方法1将包括:

int myArray1[10]={0}

将向方法2传递指向myArray的指针:

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

int myIntArray[10];
那么现在应该是一个空数组,对吗?

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

此外,您的方法仅为本地数组分配您传递的数组的第一个值。
你到底想做什么?我不确定

int myIntArray[10];
那么现在应该是一个空数组,对吗?

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

此外,您的方法仅为本地数组分配您传递的数组的第一个值。
你到底想做什么?我不确定

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

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

int *pMyArray = myIntArray
好的,
pMyArray
指向
myIntArray
中的第一个元素

anotherMethod(int *pMyArray){    
    int myLocalArray[10];    
    myLocalArray[0] = *pMyArray;    
}
这不会将指针分配给任何对象,而是将本地数组的第一个值分配给由
pMyArray
指向的
int
,记住,它是未初始化的。我在代码中添加了<代码> 10代码>代码,因为在C++中不能有未知大小的数组。 要修改
pMyArray
指向的内容,需要通过引用传递:

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

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

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

我想把这个指针赋给一个局部变量(这里是 我真的不确定

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

int *p_myLocalArray;    
p_myLocalArray = pMyArray; 
不正确,它是一个包含10个未初始化整数的数组

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

我想把这个指针赋给一个局部变量(这里是 我真的不确定

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

int *p_myLocalArray;    
p_myLocalArray = pMyArray; 

这里有一些错误

首先,通过使用初始值设定项语法实现零数组(而不是空数组):

int myIntArray[10]={0}

第二,
int myLocalArray[]的大小为0。即使它的大小是,比如说,10,写
myLocalArray[0]=*pMyArray
将把
pMyArray
中的第一个int赋值给
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);
}

这里有一些错误

首先,通过使用初始值设定项语法实现零数组(而不是空数组):

int myIntArray[10]={0}

第二,
int myLocalArray[]的大小为0。即使它的大小是,比如说,10,写
myLocalArray[0]=*pMyArray
将把
pMyArray
中的第一个int赋值给
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);
}

使用std::vector可以解决所有问题。一些测试代码可以帮助您解决问题。不要依赖“知识”。试试看!如果你没有得到这个程序的编译错误,那么你应该打开它们。在GCC中,这是
g++-Wall
。或者,更好的是,
-Wall-Werror
-Wall
并不是真正的“全部”,你应该使用
-Wall-Wextra
(但不是任何像
-pedantic
,该死的!)。使用
std::vector