Я знаю, что двухмерный массив хранится в памяти как одномерный массив. Итак, следуя той же логике, я пытаюсь передать массив по ссылке с помощью одного указателя, как это делается для 1-мерного массива. Ниже мой код:Как ссылаться на двумерный массив?
#include<stdio.h>
void display(int *s)
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d ",s[i][j]);
}
printf("\n");
}
}
int main()
{
int s[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
printf("address of the array is %p\n",s);
printf("value is %p\n",*s);
int i;
printf("address of the repective array is\n");
for(i=0;i<3;i++)
{
printf("address of the array is %p\n",s[i]);
}
display(s);
return 0;
}
Когда я пытаюсь скомпилировать это получить следующее сообщение:
twodarray.c: In function ‘main’:
twodarray.c:25:2: warning: passing argument 1 of ‘display’ from incompatible pointer type [enabled by default]
display(s);
^
twodarray.c:2:6: note: expected ‘int **’ but argument is of type ‘int (*)[4]’
void display(int *s[3])
^
Когда я запускаю приведенный выше код я получаю сообщение об ошибке ошибки сегментации.
Похоже, что вы инициализировали 2D-массив, но пытались передать его функциям в виде массива 1D. Я мог ошибаться, но –
Да, это 2D-массив, но не является ли 2D-массив таким же, как 1D-массив в памяти? – user2738777
'void display (int * s)' change to 'void display (int s [3] [4])' если вы хотите 'printf ("% d ", s [i] [j]);' – BLUEPIXY