gpt4 book ai didi

C++ 将数组作为值/指针发送的区别

转载 作者:行者123 更新时间:2023-11-30 02:55:32 25 4
gpt4 key购买 nike

所以我以某种方式让它起作用了,我真的很想知道为什么我的第一次尝试失败了。

我有非正式的 C 经验,现在正在尝试学习 C++。我想我会尝试一些常用命令,例如将参数传递给函数,但在尝试访问传递的数组的内容时收到“不完整类型错误”。

这是错误的代码:

    void printoutarray(int array[][], int height, int width){
for (int x = 0; x < width; x++){
for (int y = 0; y < height; y++){
cout << array[x][y]) << " ";
}
cout<<"\n";
}
}

我能够使用指针修复代码:

    void printoutarray(int *array, int height, int width){
for (int x = 0; x < width; x++){
for (int y = 0; y < height; y++){
cout << *(array+x*width+y) << " ";
}
cout<<"\n";
}
}

并像这样传递数组:

    #define hght 5
#define wdth 5
/*Other code/main function*/
int inputarray[hght][wdth] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}};
printoutarray(*inputarray, hght, wdth);

但我的问题是为什么我必须专门向函数发送一个数组指针。数组变量本身不应该是指针吗?另外,为什么我需要在我的“固定”代码中包含取消引用运算符,是因为我正在发送指针的指针吗?同样,我主要对这种语言的工作原理感到好奇,因此非常感谢任何见解,谢谢!

最佳答案

数组在传递给函数时会转换为指针(在 C 和 C++ 中为真)。您的错误似乎是认为,因此,当传递给函数时,二维数组应该转换为双指针,这是不正确的。

你有一个二维数组

int inputarray[hght][wdth] = ...;

一种看待它的方法是,它是一个大小为 hght 的数组,该数组的每个元素都是另一个大小为 wdth 的数组。因此,当将此数组转换为指针时,您将获得一个指向大小为 wdth 的数组的指针。像这样

void printoutarray(int array[][wdth], int height, int width){

或更明确地这样

void printoutarray(int (*array)[wdth], int height, int width){

通过这些细微的更改中的任何一个,您的原始代码都可以正常工作。虽然在这两种情况下 width 参数都是无用的,因为此函数仅适用于宽度为 wdth

的数组

这里发生的一切在 C 中也不会以完全相同的方式工作。

关于C++ 将数组作为值/指针发送的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16389419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com