2011-05-15 32 views
1

我写了一个C程序来创建一个指针数组,并且每个单独的指针将依次是单独的数组(有点像二维数组)。我写了下面的C代码,但它不起作用。如何使用指针数组?

#include<stdlib.h> 
#include<conio.h> 
int main(void) 
{ 
    int rows=5,cols = 5; 
    int *a[100]; 
    int i = 0; 
    int j; 
    int k = 0; 
    int b[100]; 
    while(i<rows) 
    { 
     printf("\nEnter the %d row: ",i); 
     for(j=0;j<cols;j++) 
      scanf("%d",&b[j]); 

     a[k++] = b; 
     i = i + 1; 
    } 
    k = k-1; 
    for(i=0;i<=k;i++){ 
     for(j=0;j<cols;j++){ 
      printf("%d ",a[i][j]); 
     } 
    }    

    getch(); 
    return 0; 
} 

我想是这样一个5*5 matrix structure,但我想操纵每一行,好像他们是一个维数组。有人能告诉我该怎么做吗?

+1

...作为什么?我认为你的问题被截断了。 – 2011-05-15 15:46:05

回答

2

的错误是在这里:

a[k++] = b; 

我假设你正在尝试做的b副本,并将其添加到a,但你真的只增加另一个参考b

试试这个:

// int b[100]; // Delete this! 
while(i<rows) 
{ 
    int *b = calloc(cols, sizeof(int)); // Replacement for int b[100] 
    printf("\nEnter the %d row: ",i); 
    for(j=0;j<cols;j++) 
     scanf("%d",&b[j]); 

    a[k++] = b; // Now it's safe to do this, because `b` is a different array each time 
    i = i + 1; 
} 
1

每个行指针指向同一行!你的程序用行1覆盖第0行,然后用第2行覆盖第1行等。每行需要一个单独的数组。

+0

我每次进入一个新的数组b时都会得到它,旧的数据库会丢失。当行数增加时会出现问题。此外,我不知道提前的行数,它会在运行时提供给我由用户。那么这种方法变得不可行。你可以提出一种解决方法 – station 2011-05-15 16:00:02

0

这有什么错int a[5][5];?但如果要动态控制尺寸,请从下面开始:

int rows = 5, cols = 5; 
int** a; 
int i; 

a = malloc(rows * sizeof(*a)); 
for(i = 0; i < rows; i++) 
    a[i] = malloc(cols * sizeof(**a));