二维引用
Ⅰ 关于C语言的二维数组元素引用的问题
二维数组a[4][3]的二维指针引用方式表示描述
*(a+i)取行,此处不能表示任何元素,必须再加j取列
然后*(*(a+i)+j)取了元素
Ⅱ c语言中二维数组怎么引用某一行
在C语言二维数组中,第一个维数为行,第二个维数为列。因此第一维的数即是引用的行数,示例代码如下 (vc6.0编译通过)。
#include<stdio.h>
intmain()
{
inta[2][3]={1,2,3,4,5,6};
printf("打印第1行的数: ");
intinx;
for(inx=0;inx!=3;++inx)printf("%d ",a[0][inx]);
printf(" 打印第2行的数 ");
for(inx=0;inx!=3;++inx)printf("%d ",a[1][inx]);
printf(" ");
return0;
}
Ⅲ excel如何引用二维数组,并且参与计算!
可用index+match函数或者Vlookup+match函数
找到二维数组中的比热容数据.
Ⅳ C语言中指针引用二维数组元素的问题
对于a[i][j](二维数组的大小为n×m)而言,
首先要搞清楚行指针和列指针
行指针:&a[i]或者a+i指向行,&a[i]=&*(a+i)=a+i
列指针:a[i]或*(a+i)指向列,a[i]等价于*(a+i)
元素的引用方式有如下三种方式
1.通过地址引用二维元素
*(&a[i][j]),
*(a[i]+j),
*(*(a+i)+j),
*(a[0]+m*i+j)
*(&a[0][0]+m*i+j)
(*(a+i))[j]
2.建立一个指针数组引用二维元素
int *p[3],a[3][2],i,j;
for(i=0;i<3;i++)
p[i]=a[i];//p[i]用来存放地址,a[i]为列地址
等价如下
(1) *(p[i]+j) 与*(a[i]+j)对应
(2)*(*(p+i)+j) 与*(*(a+i)+j)对应
(3)(*(p+i))[j] *(p[i]+j) 与*(a[i]+j)对应
(4)p[i][j] 与a[i][j]对应
3.建立一个行指针引用二维数组元素
int a[3][2],(*p)[2];
p=a;
(1) *(p[i]+j) 与*(a[i]+j)对应
(2)*(*(p+i)+j) 与*(*(a+i)+j)对应
(3)(*(p+i))[j] 与(*(a+i))[j]对应
(4)p[i][j] 与a[i][j]对应
例题如下
1.
#include<stdio.h>
main()
{
int score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};
int i,j;
printf("输入学生号:0-2");
scanf("%d",&i);
printf("the score of No.%d are:\n",i);
for(j=0;j<4;j++)
printf("%d\t",*(*(score+i)+j));//score+i为列指针,*(score+i)为行指针
printf("\n");
}
2.
#include<stdio.h>
main()
{
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int *p;
for(p=a[0];p<a[0]+12;p++)//使p依次指向下一个元素,a[i]和*(a+i)是指向列的指针;&a[i]或a+i是指向行的指针
{
if((p-a[0])%4==0)printf("\n");
printf("%4d",*p);//输出p指向的数组元素的值
}
printf("\n");
}
3
#include<stdio.h>
main()
{
int score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};
int i,j;
printf("输入学生号:0-2");
scanf("%d",&i);
printf("the score of No.%d are:\n",i);
for(j=0;j<4;j++)
printf("%d\t",*(score[i]+j));
printf("\n");
}
4
#include<stdio.h>
main()
{
int score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};
int i,j,*p;
printf("输入学生号:");
scanf("%d",&i);
printf("the score of No.%d are:\n",i);
for(p=score[i];p<score[i]+4;p++)
printf("%d\t",*p);//p+i指向第i行,*(p+i)指向第i行0列元素*(p+i)+j指向第i行j列元素,是列地址
printf("\n");
}
5.
#include<stdio.h>
main()
{
int score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};
int i,j,*p;
printf("输入学生号:");
scanf("%d",&i);
printf("the score of No.%d are:\n",i);
for(p=score[i],j=0;j<4;j++)
printf("%d\t",*(p+j));
printf("\n");
}
6
#include<stdio.h>
main()
{
int score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};
int i,j,(*p)[4];//指针变量p指向包括4个整型元素的一维数组;
p=score;//p指向二维数组0行元素,p+1所指向的元素是p所指向元素的下一行元素;
printf("输入学生号:0-2");
scanf("%d",&i);
printf("the score of No.%d are:\n",i);
for(j=0;j<4;j++)
printf("%d\t",*(*(p+i)+j));//p+i指向第i行,p是行指针,*(p+i)指向第i行0列元素,是列指针。*(p+i)+j指向第i行j列元素,是一个元素的地址
printf("\n");
}
Ⅳ c语言中二维数组的引用
您好,给你举一个列子,
如我定义一个三行四列的数组, int a[3][4];
数组名为a,其下标变量的类型为整型。该数组的下标变量共有3×4个,即:
a[0][0],a[0][1],a[0][2],a[0][3]
a[1][0],a[1][1],a[1][2],a[1][3]
a[2][0],a[2][1],a[2][2],a[2][3]
调用方式即:a[行数][列数]
Ⅵ EXCEL的二维引用最多能引用多少张工作表数据
假设表1的数据在A:C列,表2的408在A2 B2输入公式 =vlookup($a2,表1!$a:$c,column(b1),) 向右向下填充
Ⅶ 二维数组引用问题
事实上,全部都不是。
task_sp[0]=task_stack[0]+1;//这一句的左边是一个字符型变量,而右边确实一个指针,当然这里就有错了,因为在二维数组中,可以把它分成一维数组来处理,所以你可以把task_stack[0]看成一个元素,而这个,就是一个行指针,是指向这个一维数组的指针。
如果改成task_sp[0]=*(task_stack[0]+1);则表示task_stack[0][1]
Ⅷ 谁能给我讲讲二维数组元素的引用啊都有那几种方式啊
从根本来说我知道是二种, 因为按下标访问和按指针的访问其实是一样的意义.
楼下说的 a[i][j],和*(*(a+i)+j)方式其实原理是一样的.
一\ 这种是先确认行, 寻址数组元素,是先把二维数组的每一行看成一个一维数组的元素,
然后再去分,每一行统领的那一列又作为一个一维数组.有二个步骤.
就好比给你一个门牌号, 303, 你知道门牌号的意义, 你会直接跑到三楼(按行再去找列)去找第三个房间.
二\还有一种是直接通过列去寻址,只分一次, 直接把二维数组的所有元素看成一个一维数组的元素. 通过偏移量计算每个元素的值. 这时候输出的方式就是p[i * n + j] 的方式了,(n的值是数组的列数) 而不是像第一种是 p[i][j]的方式.
这种方式是给你一个门牌号, 303, 你不知道门牌号的意义, 你会先从一楼开始一间一间的找, 然后二楼,三楼,这时候你发现找到了.
没有时间答的很好,仔细, 如果你初学没多久,看不太懂的话, 还是得自己去查资料学, 或者找好的课件,找老师去问. 这样才能足够确信, 加理解.
我这里能提供的就是,在你学习到理解一定程度后,你还知道还有另外个方向,这时候你可以再去往这个方向,靠自己探索,搞详细,搞明白
Ⅸ 二维数组 的引用
void fun(double par[5][6],int a,int b)
Ⅹ 用指针引用二维数组元素
a 是数组首地址,等于 &a[0][0].
*p 声明里是指针。语句里 *p 是 指针指向的值。 语句里 p 是地址.
*p 是1个星号的指针,可以让它指向1维数组,也可以让有序地它指向2维数的各元素。
int a[行][列]; a[j][i] 数组元素排列 是:
第一行 的 第1列,第二列,第三列....
第二行 的 第1列,第二列,第三列....
第三行 的 第1列,第二列,第三列....
2维数可以看成1维数组,排成1字长蛇阵:第一行 的 第1列,第二列,第三列..;
第二行 的 第1列,第二列,第三列....;。。。。直到最后一行最后一列。
#define row 3
#define col 4
int a[row][col]; // 某一元素: a[j][i]
int *p,i,j;
排成1字长蛇阵后,一维下标,可以用二维 下标计算: j*col + i.
某一元素: a[j][i] 的 数值 就是 * (p+j*col+i);
----
写出完整程序,依次输出所有元素,对比:
#include <stdio.h>
main()
{
#define row 3
#define col 4
int a[row][col] = { 0,1,2,3,4,5,6,7,8,9,10,11};
int *p;
int i,j;
p=&a[0][0];
for (j=0;j<row;j++){
for (i=0;i<col;i++) printf("%2d ",a[j][i]);
printf("\n");
}
printf("===========\n");
for (j=0;j<row;j++){
for (i=0;i<col;i++) printf("%2d ", *(p+j*col+i));
printf("\n");
}
return 0;
}
======
如果 是 int **p; 才有 *(*(p+i)+j))形式。
对应 a[j][i], 指向的值 是 *(*(p+j) + i)