如何解决如何使用指针算法操作二维数组中的列和行
在过去的几天里,我熟悉了二维数组以及操作它们所涉及的指针算法
int array[2][2] = {{1,2},{3,4}},*p = (*a);
// to access the value of the ith element in the array
// you can do *(p+i)
这很简单,但是当访问二维数组中的元素时,内存中的数组布局是线性的,即它看起来像这样:
[1] [2] [3] [4]
0x4 0x8 0x12 0x16
我的问题是如何使用这种在 C 中引用和访问数组的方式来操作行和列?
例如我在下面有这个程序:
#include <stdio.h>
int main(void){
int a[4][4] = {{1,2,3,4},{5,6,7,8},{1,333}},input = 0;
int *p = &(*(*a)),i = 0;
for (;p <= ((*a)+15); p++){
printf("Enter 4 numbers for array %d\n: ",i);
scanf("%d",&input);
*p = input; i++;
}
return 0;
}
我想在数组中一次输入 4 个数字而不使用括号,只使用指针算法,我怎么知道何时到达数组的末尾,然后提示填写下一个数组?我如何分别处理列和行?
p.s 我已经对此进行了研究,但我在 stackoverflow 中找到的答案并没有充分回答我的问题。
解决方法
如果我理解正确,那么您需要以下内容。
#include <stdio.h>
int main(void)
{
enum { N = 4 };
int a[N][N];
for ( int ( *p )[N] = a; p != a + N; ++p )
{
printf( "Enter %d numbers for array %td: ",N,p - a );
for ( int *q = *p; q != *p + N; ++q )
{
scanf( "%d",q );
}
}
for ( int ( *p )[N] = a; p != a + N; ++p )
{
for ( int *q = *p; q != *p + N; ++q )
{
printf( "%d ",*q );
}
putchar( '\n' );
}
return 0;
}
程序输出可能看起来像
Enter 4 numbers for array 0: 1 2 3 4
Enter 4 numbers for array 1: 5 6 7 8
Enter 4 numbers for array 2: 9 8 7 6
Enter 4 numbers for array 3: 5 4 3 2
1 2 3 4
5 6 7 8
9 8 7 6
5 4 3 2
,
您可以使用指向 4 个 int
数组的指针:
int a[4][4] = {{1,2,3,4},{5,6,7,8},{1,333}};
int (*p)[4] = a;
for (int i = 0; i < 4; i++) {
printf("Enter 4 numbers for array %d\n: ",i);
scanf("%d %d %d %d",p[0],p[1],p[2],p[3]);
p++;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。