如果要在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++;
}
}
但我怎么能用指针做到这一点?
答案 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");
}
}