c - 使用指针在 C 中填充多数组(矩阵)

标签 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++;
    }
}

但是我怎样才能用指针做到这一点呢?

最佳答案

在你的情况下:

使用指针:

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);

关于c - 使用指针在 C 中填充多数组(矩阵),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22121973/

相关文章:

c - C语言对8位数字的算术运算过程

c - 如何在所有操作后显示堆栈的大小

C# ToCharArray 不适用于 char*

c - 设置孪生指针的最有效算法

c - 将参数从指针传递到非封闭地址空间时出错

c++ - shared_ptr的机制

python从多序列比对中删除特殊列

python - 如何在python中将多行字符串转换为矩阵

r - R 的矩阵函数中的 byrow= TRUE 参数

c++ - rand() 函数生成错误范围内的数字