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