c - 将数组传递给 C 中的函数

标签 c arrays function multidimensional-array parameter-passing

虽然我们用整数数组声明了一个函数,但我们将数组的地址传递给函数。在简单整数的情况下,如果我们传递地址,就会出错,我们会得到指针转换错误。但是在数组的情况下怎么可能

#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 are\n");
    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 <> %i\n",sizeof(p1),sizeof(p2));
  else
    printf("Feeling lucky. %i == %i\n",sizeof(p1),sizeof(p2));
}

int main()
{
  char arr[5][100];
  char (*p)[100]=&(arr[0]);
  fn(arr, arr);
  fn(p, p);
  return 0;
}

关于c - 将数组传递给 C 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7278989/

相关文章:

c - 指向二维数组的指针

java - JAVA将字符串分成3部分并导出为CSV

android - 从现有数组列表创建数组范围

PHP:通过引用传递给函数的数组?

C printf 编译器警告

c - 液晶屏坏了

c - socket.h (_uid32_t) 错误

java - 如何在 Java 中编辑来自另一个类的数组

php - 与类同名的 PHP 类中的初始函数的目的是什么?

c - 如何从带有指针的函数返回数组