Передача массива в функцию в C - PullRequest
0 голосов
/ 02 сентября 2011

Хотя мы объявляем функцию с целочисленным массивом, мы передаем адрес массива функции. В случае простых целых чисел это дает ошибку, если мы передаем адрес, мы получаем ошибку преобразования указателя. Но как это возможно в случае массива

#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]);
        }
    }
}

У меня вопрос, хотя наша функция объявлена ​​как целая с массивом целых чисел в качестве первого параметра (здесь), мы передаем адрес массива при вызове функции. Как это работает?

1 Ответ

0 голосов
/ 18 сентября 2011

Вы передаете массив, а не его адрес.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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...