在c语言二维数组中,a【0】为什么是第一行的第一个元素,列不是不能缺省吗,那a【0】不应该是第一列?

作者&投稿:晋贺 (若有异议请与网页底部的电邮联系)
C语言中a[0][0]是什么意思?是第一行第一列吗?~

就是这个意思,这里c是一个二维数组,双0指得是这个数组第一个元素,如果写成矩阵的形式,正是第一行第一列的元素。

哈哈!以下标从0开始说。若a是二维数组名,则a作常指针使用时,a是第0行的指针,*a是第0行的第一个元素的指针(二者值同,意义不同),**a是第0行的第0个元素的值。这可以用以下代码验证:
int main(void){ int a[2][3]={1,2,3,4,5,6}; printf("%d
",**(a+1)); return 0;}输出肯定是4。这说明,既然a是第0行的指针,那么a+1就是第1行的指针,*(a+1)则是第1行第0个元素的指针,**(a+1)当然就是第1行第0个元素的值4了……

这是错误的认识。在C语言中,若a声明为二维数组,则a[0]所代表的是一个地址,指向a[0][0]处,而不是元素。

我们知道数组是代表一行,但数组实际是一个地址,指向首元素,同样道理,a[0]逻辑上指的是第一行,实际指向第一行首元素,也就是整个二维数组的首元素。a指的是整个二维数组,实际指向第一行,所以又称a为行指针,也叫数组指针。但是不论是a[0]还是a其所指的都是第一个元素,也就是a[0][0]的地址。其逻辑上的区别仅在指针加1时能体现出来。
例如 printf("%p",a+1);和printf("%p",a[0]+1);结果时不同的。


C语言、二维数组指针中的 * 和 &
1、我看了你说的这两页,书上的原话是这样的:“在二维数组中,a+i,*(a+i),&a[i],&a[i][0]的值相等,即他们都是同一地址值”,要注意这个字眼“地址值”,也就是说,这几种表达方式并不是内存中存的数值,而是存放数组的地址的值,首先要弄明白,首地址这个概念,如果只写数组名,就...

C语言求出二维数组中的最大元素值
include <stdio.h>#include <conio.h>#define ARR_LEN 255 \/* 数组长度上限 *\/#define elemType int \/*元素类型*\/\/* 打印矩阵内容 *\/ void printMatrix (elemType matrix[ARR_LEN][ARR_LEN], int row, int col) {int i, j;for (i=0; i<row; i++) {for (j=0; j...

C语言怎样对二维数组中每个元素进行选择排序
include <stdio.h>#include "stdlib.h"#include "time.h"int main(int argc,char *argv[]){ int a[5][8],i,j,k,t,*p; printf("排序前:\\n"); srand((unsigned)time(NULL)); for(i=0;i<5;i++){\/\/为二维数组赋值 for(j=0;j<8;printf("%3d",a[i][j++]...

C语言中,a为一个二维数组,为什么(&a[0])[2] 与(&a[2])[0]输出的结果一...
在C语言中,二维数组a在内存中的存储方式是按行优先(row-major)的方式存储的,也就是说a[0]存放在内存的第一块地址上,紧接着a[1]、a[2]……以此类推。(&a[0])[2] 表示的是a[0]指向的地址再往后偏移2个a[0]大小的位置,即移动了两个一维数组的位置,所以等价于指向a[2]这个一维...

C语言程序设计:求二维数组中最大元素值及其行列号
include<stdio.h> main(){int i,j,row=0,colum=0,max;int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,5,2}};max=a[0][0];for(i=0;i<=2;i++)for(j=0;j<=3;j++)if(a[j]>max){ max=a[j];row=i;colum=j;} printf("%d,%d,%d\\n",max,row,colum);} ...

c语言二维数组中一个下标表示什么 RT比如 int a[10][20]; a[i]表示...
题目不是很懂。就你这个例子来看,在int a[10][20]中,a[i]代表第i+1行的行地址即a[i][0]的地址,所以他可以是一个数列或者一个指针

C语言中二维数组的定义问题
1. 二维数组的第一个维度缺省是:举个例子:int tar[][2] = {1,2,3,4};因为大括号中有4个元素,而且第二个维度是2,所以就可以计算出来第一维度是2.所以是可以缺省的。2. 你的这个例子中,第一维缺省的应该是(7*8+1)\/(__MAXITERMLEN__+1) 向上取整。3. 因为fd_jpf1[i]是一个...

随机产生一个二维数组并找出二维数组中的最大值及其位置用c语言回答
include <stdio.h>#include <conio.h>#include #define LEN 100 \/*数组长度上限*\/\/*用随机数填充矩阵*\/void randomMatrix (int randMatrix[LEN][LEN],int row, int col, int min, int max) {int i,j;srand ((unsigned)time(NULL)); \/*用时间做种,每次产生随机数不一样*\/for (i=0;...

c语言二维数组与指针,我想知道为什么*(a+1).与显示中的a+1,所给出的...
二维数组是两层指针,这个你该明白 (*(a+i)+j)这个是表示i行的第j个数据,注意啊,是两个 要是不理解,记住套用即可 一个*是指针 所以ij都是指针 a+1是一个指针,表示第1行的首地址(c中数组时从0开始计数的)在二维数组中,a,a[0],&a[0][0]这三个指针虽然都是a的首地址的值,...

C语言编程求二维数组当中各行求平均值...怎么编程啊?
你这个需要两个循环吧!for(i=0;i<m;i++){ for(j=0;j<n;j++){ sum=a[i][j];} b[i]=sum\/n;} 思路应该是这样,用一个数组来接收每行的平均值,最后你在把它输出来就好了!

龙南县19390207830: c语言数组中*a为什么和a【0】相等 -
月盲金格: 因为数组的首地址也就是数组名,你的数组名为a,则 * 意思是取内容,*a就是 a地址的内容 a地址又因为是首地址和a[0]一样,所以可以说*a=a[0] 望楼主采纳

龙南县19390207830: **a在C语言中表示a[0]a[0],为什么? -
月盲金格: 举例说明,如果定义了一个二维数组a[10][10],则a本身代表着这个数组的首地址,其本质就是定义了一个二维指针,a[m][n]与*(*(a+m)+n))表示相同意思,都表示取第m行第n个变量,m和n都取0时,就是问题所示. 建议阅读下csdn上有关指针和数组的博客,有很多解释,这上面的说明还很口语化.

龙南县19390207830: C语言中二维数组下标问题 -
月盲金格: a可以理解为二重指针,a[0]理解指针,a[0][0]是对这个地址进行访问了. 其实[ ]的意义 可以理解成* .a[ i ]其实就相当于*(a+i) 所以原来的就相当于 *(*(a+i)+j) +的优先级比 *的高 所以外面那个括号可以去掉 就变成了 **(a+i)+j . 明白了吗?

龙南县19390207830: C语言:通过指针引用多维数组一节中,二维数组a[0]和*(a+0)等价,怎么理解? -
月盲金格: 理解这个问题的要点是: 二维数组是 元素为一维数组的一维数组.于是 a[0]是作为二维数组首元素的一维数组名,所以a[0]表示一维数组(实际是二维数组首行)首元素的地址,即,a[0]是a[0][0]的地址;数组名a是指针,指向其首元素(a[0]),即其值为&a[0](&a[0]指向a[0][0]),所以*(a)(即*(a+0))指向指向a[0][0];所以,a[0]与*(a+0)等价,都是指向a[0][0].不知这样说能不能理解.

龙南县19390207830: 二维数组中,*a和*a[0]为什么不同. -
月盲金格: [] 在 c 语言中不是标点符号,而是运算符. 有恒等式: a[i] = *(a+i) 所以,表达式里, *a[0] = *(*(a+0)) = *(*(a)) = **a. 你的 *a 是一个星,而 *a[0] 是 2 个 星,当然不同. ------ *a不应该是返回以a 的值作为地址的那个空间的取值吗 -- 只有 当 a 是1维数组时才是对的.*a 等于 *(a+0) 等于 a[0];

龙南县19390207830: c语言中二维数组a[i][j],为什么a=*a? -
月盲金格: 在C语言中,二者是相同的地址值.所以可以说a=*a.二维数组a定义为a[i][j]时,代表一组数据,有i行j列,共计i*j的元素.这组数据在内存中是连续存放的.而在C语言的使用中,a是二维数组的首地址.*a也就是a[0],是二维数组第一行的首地址. 所以,二者是相同的地址值,即数据a[0][0]的地址值. 也就是说,从值上,a,*a, a[0],&a[0][0]都是相同的值.当时,说a=*a也并不是完全正确的,从类型上,a等同于二维指针,而*a等同于一维指针.二者类型并不相同,只是在一定条件下可以转换.

龙南县19390207830: C语言中的 下个 语句 的运行模式 是什么 if((p - a[0])%4==0 -
月盲金格: a[0]是二维数组的第一个元素,a[0]代表了元素a[0][0]的地址,也就是二维数组第一个元素的首地址,p为整形指针,if((p-a[0])%4 == 0) printf("\n");是说当p移动到了离a[0]的位置是4的倍数的位置就输出一个'\n';

龙南县19390207830: c语言指针:一个二维数组a[3][4],为什么*a会表示&a[0][0]呢?不是【a表示&a[0] -
月盲金格: *a表示第0行第0列地址,a既是数组名,也是第0行的首地址;a[0]表示第0行0列的地址,*是取对象,&是取地址,*a[0]才表示值

龙南县19390207830: C语言为什么直接给二维数组中的某个元素赋值不行,比如A[0][0]=1,A是整型数组 -
月盲金格: C语言规定,普通数组没有赋初值,默认的数组元素值是随机数,不是0.如果在定义数组时,数据类型前面加上关键字static,数组变成了静态数组;或者把数组定义在函数的外面,成为全局变量数组,这时数组元素的值自动赋值为0.

龙南县19390207830: 关于C语言,*p=a[0]是什么意思呀? -
月盲金格: c语言中*p=a是指针变量赋值语句,这种写法有两种可能意思:1.指针变量定义时的初始化赋值int a[10];int *p=a ; //这时的a是个地址,如:数组名或指针变量,表示定义指针变量p,同时,p指向地址a. 这里的*是跟随int的,用来表示p变量是int...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网