回 帖 发 新 帖 刷新版面

主题:出错,为什么呢??? Segmemtation fault

运行下面的程序会出错! Segmemtation fault.
为什么呢?
int*[3]与int**有什么区别的吗???
希望能详细回答点,谢谢...
<code>
#include<stdio.h>
#define N 3
int A[N][N];
void Print(int **a)
{
    int i,j;
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
            printf("%d ",a[i][j]);
        printf("\n");
    }
}
void main()
{
    int i=0,j=0;
    for(;i<N;i++)
        for(;j<N;j++)
            A[i][j]=rand()%10;
    Print(A);
}
</code>

回复列表 (共3个回复)

沙发

printf("%d ",a[i][j]); 中的a[i][j]可以改为:*((int*)a+N*i+j);
或参数传递时指明二维数组的维数

这类二维数组的问题似乎蛮多呢

你可以参考我在
http://bbs.pfan.cn/post-357245.html
中的回贴

板凳

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 3
int A[N][N];
void Print(int a[N][N])//既然你已经宏定义了,就可以这么搞
{
    int i,j;
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
            printf("%d ",a[i][j]);
        printf("\n");
    }
}
void main()
{
    int i,j;
    srand((unsigned)time(NULL));
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
            A[i][j]=rand()%10;
        }
    }
    Print(A);
}

3 楼

数组指针的使用:
int (*a)[N]做为形参,a是一个int (*)[N]指针,指向一个带有N个int元素的数组。int A[N][N],用A作为实参,A自动转换为int (*)[N]

我来回复

您尚未登录,请登录后再回复。点此登录或注册