虽然我们使用整数数组声明一个函数,但是我们将数组的地址传递给函数。在简单整数的情况下,如果我们传递地址则会出错,我们会得到指针转换错误。但是在数组的情况下它是如何可能的
#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]);
}
}
}
我的问题是,即使我们的函数被声明为一个整数数组作为第一个参数(这里),我们在调用函数时传递数组地址。它是如何运作的?
答案 0 :(得分:-1)
你传递的是阵列,而不是它的地址。
arr
是一个int [] []数组
(实际上它与&(arr[0])
非常相似,它是指向数组第一行(的地址)的指针。在C中,数组和相应指针之间没有实际区别,除了你用&amp;运算符取得它的地址。)
编辑:好的,只是为了让我明白:
#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;
}