将数组传递给C中的函数



虽然我们用整数数组声明函数,但我们会将数组的地址传递给函数。在简单整数的情况下,如果我们传递地址,就会出现指针转换错误。但是,在阵列的情况下,它是如何可能的

#include<stdio.h>
void print_array(int array[][100],int x, int y);
main()
{
    int i,j,arr[100][100];
    printf("Enter the array");
    for(i=0;i<2;i++)
    {
        for(j=0;j<2;j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }
    print_array(arr,i,j);
}
void print_array(int array[][100],int x,int y)
{
    int i,j;
    printf("nThe values aren");
    for(i=0;i<x;i++)
    {
        for(j=0;j<y;j++)
        {
            printf("%d",array[i][j]);
        }
    }
}

我的问题是,即使我们的函数被声明为一个以整数数组作为第一个参数的函数(这里(,我们在调用函数时也会传递数组地址。它是如何工作的?

您传递的是数组,而不是它的地址。arr是int[][]数组(事实上,它与&(arr[0])非常相似,后者是指向数组第一行(的地址(的指针。在C中,数组和相应的指针之间没有实际的区别,只是用&操作员。(

编辑:好的,只是为了让我明白:

#include <stdio.h>
int fn(char p1 [][100], char (*p2)[100])
{
  if (sizeof(p1)!=sizeof(p2))
    printf("I'm failed. %i <> %in",sizeof(p1),sizeof(p2));
  else
    printf("Feeling lucky. %i == %in",sizeof(p1),sizeof(p2));
}
int main()
{
  char arr[5][100];
  char (*p)[100]=&(arr[0]);
  fn(arr, arr);
  fn(p, p);
  return 0;
}

相关内容

  • 没有找到相关文章