使用指针在C中填充多阵列(矩阵)

时间:2014-03-01 23:46:05

标签: c pointers matrix

如果要在C中填充矩阵,可以使用索引,如下所示:

#include<stdio.h>

int main(){

    char m[20][30];

    int i = 0;
    int j = 0;

    while(i <= 20){
        j=0;
        while(j <= 30){

            m[i][j] = 's';
            printf("%c", m[i][j]);
            j++;

        }
        printf("\n");
        i++;
    }
}

但我怎么能用指针做到这一点?

2 个答案:

答案 0 :(得分:2)

在你的情况下:

使用指针:

char m[20][30];
char *ptr; // Your pointer 
ptr=m; // point ptr to the location where m points to 

现在,替换

m[i][j] = 's';
printf("%c", m[i][j]);

*((char *)ptr + (i * 30) + j) = 's';
    printf("%c", *((char *)ptr + (i * 30) + j));

为什么会这样?

对于一维数组:

 int a[10];

您可以像访问它一样访问它:

a[1]; //Say the 2nd element

因此,就指针而言,这相当于:

*((int*)a+1).

对于二维数组:

int b[NO_OF_ROWS][NO_OF_COLUMNS];

以一般形式,假设任何元素:

b[r][c]; // let r < NO_OF_ROWS, c < NO_OF_COLUMNS be any index

相当于

*((int *)b + r * NO_OF_COLUMNS  + c);

答案 1 :(得分:0)

我认为使用指针代替[]运算符的原因是它有点快(理论上无论如何)......在这种情况下,我认为你想要这个......

#include <stdio.h>

int main()
{
    char m[20][30];

    char (*ptr1)[30];
    char *ptr2;

    for (ptr1 = m; ptr1 < m + sizeof(m) / sizeof(m[0]); ptr1++)
    {
        for (ptr2 = *ptr1; ptr2 < *ptr1 + sizeof(*ptr1) / sizeof((*ptr1)[0]); ptr2++)
        {
            *ptr2 = 's';
            printf("%c", *ptr2);
        }
        printf("\n");
    }
}