【二维数组与指针】error: invalid type argument of unary '*' (have 'int')出现的原因及解决方法

#include
#include

void change();

int main()
{
printf("ÐÕÃû£º%s ѧºÅ£º%s\n","Ñî˼ºã","18090033026");
int a[3][3];
int i,j;
int * p;
p=* a;
printf("Please enter a 3x3 array:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)scanf("%d",p++);
}
p=* a;
change(p,3,3);
printf("After changing:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)printf("%d ",* (p++));
printf("\n");
}
return 0;
}

void change(int (* x)[3],int y,int z)
{
int i,j;
int m[3][3];
int * n;
n=*m;
for(i=0;i<y;i++)
for(j=0;j<z;j++)*(*(n+i)+j)=*(*(x+i)+j);
for(i=0;i<y;i++)
for(j=0;j<z;j++)*(*(x+i)+j)=*(*(n+j)+i);
}
图片说明

void change(int (*x)[3],int y,int z)
{
int i,j;
int n[3];
int k;
for(i =0;i<y;i++)
{
for(j =0;j<z;j++)
{
*(
(n+i)+j) = ((x+i)+j);
}
}

for(i =0;i<y;i++)
{
for(j =0;j<z;j++)
{
((x+i)+j) = ((n+j)+i);
}
}
}

你的 *n 有问题,改为 (*n)[3],也不用再定义一个m[3][3]

不知道你要做什么,矩阵转置?

#include "stdio.h"
#include "stdlib.h"

void change(int ** x,int y,int z);

int main()
{
printf("ÐÕÃû£º%s ѧºÅ£º%s\n","Ñî˼ºã","18090033026");
int a[3][3];
int i,j;
int * p;
p=* a;
printf("Please enter a 3x3 array:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)scanf("%d",p++);
}
p=* a;
change(&p,3,3);
printf("After changing:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)printf("%d ",* (p++));
printf("\n");
}
return 0;
}

void change(int ** x,int y,int z)
{
int i,j;
int * n = (int *)malloc(sizeof(int) * y * z);
for(i=0;i<y;i++)
    for(j=i;j<z;j++)
        *(n+i*y+j)=*(*x+j*y+i);
for(i=0;i<y;i++)
    for(j=0;j<i;j++)
        *(n+i*y+j)=*(*x+j*y+i);
*x = n;
}