C语言的二维数组中a[i]+j这个j为什么表示的是字节数? c语言中,二维数组的&a[i]+j和a[i]+j 一样吗?

作者&投稿:玉育 (若有异议请与网页底部的电邮联系)
如果有二维数组
short int a[4][5];
那么 a[i] 就不是下标变量,而是地址:&a[i][0]
所以 a[i]+j 是 a[i] 这个单元所在地 的 下面 的 第 j 个 元素的 地址
a[i]+j 等于 &a[i][0] + j * sizeof(short int) -- 加的这项东西 就是 j乘2 个 字节。

老谭的书很老了。现在的 int 默认 是 4 字节。
int a[4][5]; a[i]+j 是 :&a[i][0] + j * sizeof(int) -- 加的这项东西 就是 j乘4 个 字节
char a[4][5]; a[i]+j 是 :&a[i][0] + j * sizeof(char) -- 加的这项东西 就是 j乘1 个 字节
double a[4][5]; a[i]+j 是 :&a[i][0] + j * sizeof(double) -- 加的这项东西 就是 j乘8 个 字节

指针变量的增减是按地址进行的,a[i] + j应该表示的是a[i] + j*sizeof(....)。

C语言中 二维数组@a[i][j]的地址为什么可以表示成*(a+i)+j难道*(a+i)还表示一个地址的值?求高手详细解释~

a是一个二维数组,a[i]表示其中的一行,是个一维数组,a[i][j]表示一行里面的一个元素。
*(a+i)就是a[i],是一个一维数组,当然表示一个地址,表示这个一维数组里面的第一个元素a[i][0]的地址。

一样的 两个都是代表 a[i][j]的地址

假如定义一个二维数组a[i][j],for(int j=0;j<a[i].length;j++)循环里...
答:与a[i][j]的类型有关。这是一个变长的二维数组,长度在其成员的length中存储。占位符都还在,只是有效访问数目由对应的length的值来决定。

请问printf("%d ",a[i][j])是什么意思,还有如何用C++来写,因为自己没学...
答:printf("%d ",a[i][j])意思是:打印 2维数组a 的 第 i 行,第 j 列 的元素 的数值,然后 空 1格 ,不换行。C 变 c++ , 把程序头部最前面 添加上2行:include <iostream> using namespace std;下面还用原来的C程序 存放成新文件名,扩展名用 .cpp 就可以了。不必做其它额外的事。-...

java中a[i][j].toString().trim().equals("")是什么意思??
答:java中a[i][j].toString().trim().equals("")解释如下:1.a[i][j]表示二维数组的一个数据,使用toString()方法转换为string类型。2.trim()表示字符串去掉空格,接着与空格进行比较,看是否字符串仍未空。

c语言二维数组里(a+i)[j]表示的是地址还是值?
答:(a+i)[j]表示地址。a[i]表示第i行的首地址。a[i]+j表示第i行j列元素的地址。(a[i]+j)代表i行j列元素的值。

a[5][6]是个二维数组,要表示a[i][j]的地址
答:a表示一个二维数据,a+i表示的是a[i]的地址,*(a+i)表示a[i][0]的地址,然后*(a+i)+j才表示a[i][j]的地址。a表示二维,加*表示一维,所以要加*。

c语言 为什么a[i][j]=i+j 里 i+j是怎么来的 还有a[i]+[j]=i*n+j+1...
答:访问元素的时候:a[1][2]就表示第二个元素的最后一个元素也就是66,因此a[0][2]就表示第一个元素的最后也就是33,所以得出了一个结论:a[i][j]:就表示第i行的第j个元素,因此,a[i][j] =i+j,注意这里的这个表达式只是说明了数组的元素位置,并不是真的实际值,如上:a[0][2]的...

关于对数组元素a[i][j]的引用:*(*(a+i)+j)为什么也正确呢,*(a+i...
答:a+i表示相对于地址a偏移 i 个单位的地址,与a[i]等同,(a + i)表示对 相对于地址a偏移 i 个单位的地址 取内容,即表示对a[i] 的地址 再取内容,因为a[i] 与&a[i]等同,所以取出的为a[i]的地址,也与a[i]等同,为同一地址。而*(*(a+i)+j)表示二维数组第 i 行第 j 列...

C语言的二维数组问题
答:静态声明的二维数组的存储是连续的 比如int a[2][2] = { {1,2}, {3,4} };那么它在内存里的实际存储其实就是1 2 3 4 这4个空间前后连续 所以定位一个m行n列的二维数组中的某个元素的位置,可以使用线性下标来访问 比如a[i][j]在一个n列的二维数组里的位置就是i*n+j 拿刚才那个...

...循环中二维数组元素加一,也就是c语言中的循环里二维数组a[i][j...
答:x++ 可以用 x = x + 1 代替, 这样就可以移植到其它编程语言里去了 比如在 MATLAB 里可以写 a(i, j) = a(i, j) + 1;

c语言中二维数组按行还是按列存储啊?
答:在c语言里二维数组元素在内存中是按行存放的。二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:LOC(a[i][j]) = LOC(a[p][q]) + ((i −...