将多维数组传递给C ++中的函数

时间:2016-01-23 18:27:59

标签: c++ arrays function multidimensional-array

我目前正在阅读有关C ++的教程,其中包含以下内容:

  

当传递更高维度的数组时,只能打开第一个维度,而在编译期间必须知道其他维度。

我需要对此进一步解释。将1D数组(int a[])传递给某个函数f()时,数组会衰减为指针int* a。我假设上面的语句暗示例如int a[][]的2D数组衰减到int *a[]或者说它只能动态分配第一个维度(这是无意义的)。具体来说,“只有第一个维度可以打开”的说法是什么?这是我能够提出的唯一两个解释。

2 个答案:

答案 0 :(得分:1)

作者说如果一个数组是int a[5][10]并且你想要将该数组传递给某个函数,那么在函数声明中你可以编写接受该数组作为int x[][10]的参数,甚至是参数int x[][10] 1}}衰减到int (*x)[10]

无论如何,传递2D数组的好方法是:

template<typename T, int first,int second>
void someFunction(T (&array)[first][second])
{....}
  

我假设上面的陈述暗示了一个2D数组   示例int a [] []衰减到int * a []

int a[x][y]衰减到int (*a)[y],即ay整数数组的指针,与int *a[y]不同,这意味着ay var classNames = document.getElementsByClassName("list-item-title"); var i; for (i = 0; i < classNames.length; i++) { classNames[i].style.fontWeight = 'bold'; } var i; var xhr; var obj; var employerNames = document.getElementsByClassName("list-item-body"); document.getElementsByClassName("lst-head-l")[0].insertAdjacentHTML('afterend', "<a href='https://www.glassdoor.com/index.htm'><img src='https://www.glassdoor.com/static/img/api/glassdoor_logo_80.png' title='Ratings Provided by Glassdoor' /></a>"); var apiURL = "https://api.glassdoor.com/api/api.htm?t.p=51863&t.k=kPRnCOceJPO&userip=0.0.0.0&useragent=&format=json&v=1&action=employers&q="; for (i = 0; i < employerNames.length; i++) { var xhr = new XMLHttpRequest(); xhr. open("GET", apiURL + employerNames[i].children[2].children[0].innerHTML, false); xhr.send(); var obj = JSON.parse(xhr.responseText); if (obj.response.totalRecordCount != 0) { var child = employerNames[i].children[2].children[0]; var rawRating = obj.response.employers[0].overallRating; var rating = Math.round(rawRating); var link = "http://www.glassdoor.com/api/api.htm?version=1&action=employer-overview&t.s=w-m&t.a=c&employerId=" + obj.response.employers[0].id; var text = "<a href=\"" + link + "\"> <b style=\"color: #7cb228; font-size: 120%;\" title=\" " + rawRating + " \">"; for (var k = 0; k < rating; k++) { text += "&#9733;"; } for (var k = 0; k < (5 - rating); k++) { text += "&#9734;"; } text += "</b>"; child.insertAdjacentHTML('afterend', text); // employerNames[i].children[2].innerHTML += " <b style=\"color: black\">(" + obj.response.employers[0].overallRating + ") &#9733; </b>"; } } int指针数组。

答案 1 :(得分:1)

如果你有一个二维数组,例如

int a[M][N];

然后在表达式中使用,例如在参数表达式中,如果相应的函数参数不是引用,则将其隐式转换为指向其第一个元素int ( * )[N]的指针。

例如,你可以写

int ( *p )[N] = a;

你可以通过以下方式想象它。

如果您有阵列

T a[M};

然后它在表达式中被隐式转换为指向其第一个元素T *的极少数例外。

如果你有一个二维数组

int a[M][N];

你可以用以下方式表示

typedef int T[N];
T a[M];

所以指针看起来像

T *p = a;

其中类型T是一维数组int [N]