法1.没有使用typedef类型定义
[cpp] view plaincopy
#include <stdio.h>
int (*fun(int b[][2]))[2]
{
return b
}
int main()
{
int i,j
int a[2][2]={1,2,5,6}
int (*c)[2]
c = fun(a)
for(i=0i<2i++)
for(j=0j<2j++)
printf("%d ",c[i][j])
return 0
}
法2.使用typedef类型定义
[cpp] view plaincopy
#include <stdio.h>
typedef int (*R)[2]
R fun(int b[][2])
{
return b
}
int main()
{
int i,j
int a[2][2] = {1,2,5,6}
R c
c = fun(a)
for(i=0i<2i++)
for(j=0j<2j++)
printf("%d ",c[i][j])
return 0
}
使用typedef类型定义可以增加程序的可读性
这两种方法本质上是一样的
c[][1]={1,2,3} 根据初始化的数据,得出这个数组 有3行,每行1列。等价于声明了: c[3][1]
所以 语句 要 用 for (x=0x<3x++) for (y=0y<1y++) { 来输出 c[x][y] }
而你用 了 y<3, 所以错了,
有c[0][0], 没有 c[0][1], 没有 c[0][2],
有c[1][0], 没有 c[1][1], 没有 c[1][2],
有c[2][0], 没有 c[2][1], 没有 c[2][2].
1、当成普通数组使用,用for循环即可赋值。2、例程:
#include
#include
int
main(void)
{
int
*a=NULL
int
i
a=malloc(sizeof(int)*10)/*动态创建一个有10个int元素的数组*/
if
(a==NULL)
{
/*a==NULL表示空间分配失败*/
fprintf(stderr,"MEMORY
ERROR")
return
-1
}
for
(i
=
0
i
<
10
i++)
{
a[i]=i
/*对数组进行赋值操作*/
}
free(a)/*动态分配的空间需要用free()函数释放*/
return
0
}