8

我试图从指向数组的双指针中获取二维数组的行数和列数。

#include <stdio.h>
#include <stdlib.h>

void get_details(int **a)
{
 int row =  ???     // how get no. of rows
 int column = ???  //  how get no. of columns
 printf("\n\n%d - %d", row,column);
}

上面的函数需要打印尺寸的详细信息,哪里出错了。

int main(int argc, char *argv[])
{
 int n = atoi(argv[1]),i,j;
 int **a =(int **)malloc(n*sizeof(int *)); // using a double pointer
 for(i=0;i<n;i++)
   a[i] = (int *)malloc(n*sizeof(int));
 printf("\nEnter %d Elements",n*n);
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
  {
   printf("\nEnter Element %dx%d : ",i,j);
   scanf("%d",&a[i][j]);
  }
 get_details(a);
 return 0;
 }

我正在使用 malloc 创建数组。


如果我使用这样的东西怎么办

列 = sizeof(a)/sizeof(int) ?

4

2 回答 2

11

C不做反射。

指针不存储任何元数据来指示它们指向的区域的大小;如果您只有指针,那么就没有(便携式)方法来检索数组中的行数或列数。

您需要将该信息与指针一起传递,或者您需要在数组本身中使用一个标记值(类似于 C 字符串如何使用 0 终止符,尽管这只会为您提供字符串的逻辑大小,即可能小于它所占据的阵列 的物理大小)。

The Development of the C Programming Language中,Dennis Ritchie 解释说,他希望像数组和结构这样的聚合类型不仅代表抽象类型,而且代表会占用内存或磁盘空间的位集合;因此,该类型中没有元数据。这是您应该跟踪自己的信息。

于 2012-10-19T00:22:36.343 回答
4
void get_details(int **a)
{
 int row =  ???     // how get no. of rows
 int column = ???  //  how get no. of columns
 printf("\n\n%d - %d", row,column);
}

恐怕你不能,因为你得到的只是指针的大小。

您需要传递数组的大小。将您的签名更改为:

void get_details(int **a, int ROW, int COL)
于 2012-10-18T23:44:41.470 回答