一些概念,请真正懂得的大神帮忙解答,网上各种回答太多,各有说法。
1、&a[0][0]为0行0列元素的首地址,a[0]+n为0行第n个元素地址,那么a[0]是表示0行首元素地址吗?&a[0]是零行的首地址,实际上行的地址也只有一个,也无所谓0行的首地址吧?+n相当于元素位移了n个位置吗,所以代表第n个元素地址吗?然后*(a[n]+m)就表示n行第m个元素了?
2、书中写a+n表示第n行的首地址,那是相当于&a[n]吗,a不是表示数组首个元素地址吗,怎么+n不是元素位置改变,却是位移了行?还是a+n表示n行首个元素的地址?为什么
*(a+n)与a[n]是等价的,原理是什么,*(*(a+n)+m)怎么也能表示n行m列元素呢?
1ã&a[0][0]为0è¡0åå ç´ çé¦å°åï¼a[0]+n为0è¡ç¬¬n个å ç´ å°åï¼é£ä¹a[0]æ¯è¡¨ç¤º0è¡é¦å ç´ å°ååï¼
>>æ£ç¡®, a[0]å°±æ¯0è¡é¦å°å.
&a[0]æ¯é¶è¡çé¦å°åï¼å®é ä¸è¡çå°åä¹åªæä¸ä¸ªï¼ä¹æ æè°0è¡çé¦å°åå§ï¼
>>&a[0]å¼ä¸, æ¯åa[0]ç¸åç, ä¸è¿ç±»åä¸ä¸æ ·. a[0]çæäºint *å,å®é ä¸æ¯æåä¸ä¸ªå ç´ . è&a[0]æ¯è¡æé, æåä¸è¡.æ以,a[0]+nå&a[0]+næ¯å®å ¨ä¸åç.
+nç¸å½äºå ç´ ä½ç§»äºn个ä½ç½®åï¼æ以代表第n个å ç´ å°ååï¼
>>+nåå³äºåå§æéçç±»å. å¦ææ¯a[0]+n 移å¨çæ¯n个å ç´ .è&a[0]+nå°±æ¯ç§»å¨nè¡äº.
ç¶å*ï¼a[n]+mï¼å°±è¡¨ç¤ºnè¡ç¬¬m个å ç´ äºï¼
>>è¿å¥æ²¡é. ä»»ä½æ
åµä¸, *(p+n)é½çæäºp[n]
2ã书ä¸åa+n表示第nè¡çé¦å°åï¼é£æ¯ç¸å½äº&a[n]åï¼aä¸æ¯è¡¨ç¤ºæ°ç»é¦ä¸ªå
ç´ å°ååï¼æä¹+nä¸æ¯å
ç´ ä½ç½®æ¹åï¼å´æ¯ä½ç§»äºè¡ï¼
>>è¿ä¸ªä¸é¢è¯´è¿äº, æ ¸å¿å¨äºæéçç±»å. äºç»´æ°ç»int a[M][N]çæ°ç»åa, æ¬è´¨ä¸æ¯å¸¸éçint (*)[N]ç±»å, ä¹å°±æ¯æ°ç»æé. 移å¨çæ¶åæ¯æ´è¡ç§»å¨ç.
è¿æ¯a+n表示nè¡é¦ä¸ªå ç´ çå°åï¼ä¸ºä»ä¹
>>åä¸
*(a+n)ä¸a[n]æ¯çä»·çï¼åçæ¯ä»ä¹ï¼*ï¼*ï¼a+n)+mï¼æä¹ä¹è½è¡¨ç¤ºnè¡måå
ç´ å¢ï¼
>>*(a+n)ä¸a[n]çä»·, è¿ä¸ªæ¯Cè¯è¨çä¸ä¸ªè§å. å ¶æ¬è´¨æ¯, å½ç¼è¯å¨éå°a[n]è¿æ ·çå½¢å¼æ¶, å®é ä¸æ¯ç¿»è¯æ*(a+n)è¿è¡ç¼è¯ç. è¿ç§å¯ä»¥ç¨ä¸ä¸ªå¾å°è§çå½¢å¼æ¥éªè¯.ä½ å®ä¹
int a[4]={1,2,3,4}; ç¶åè¾åº
printf("%d\n", 3[a]);
对, å°±æ¯ææ°ç»åæ¾è¿[], å®é ä¸ä¼è¾åºa[3]
追é®å¦a[m][n]æ°ç»åa, æ¬è´¨ä¸æ¯å¸¸éçint (*)[n]ç±»å, 移å¨æ¯æ´è¡ç§»å¨çãé£ä¹a+1å³ç§»å¨ä¸è¡ï¼ä¸é¢ä¸æép=a,ç¶åp++ï¼å´æ¯é个å
ç´ åæ¢ï¼åæ¯æä¹åäºï¼ï¼é¢ä¸p=a[0]ï¼ä½æ¯æ¹æp=aä¹å¯ä»¥è¿è¡ï¼
{int a[3][5],i,j,*p;
p=a[0];
printf("please input:\n");
for(i=0;i<3;i++)
{for(j=0;j<5;j++)
{scanf("%d",p++);
}}p=a[0];
printf("the array is:\n");
for(i=0;i<3;i++)
{for(j=0;j<5;j++)
{printf("%5d",*p++);
}}}
ä¸ç®¡æ¯ç¨aè¿æ¯a[0]èµå¼ï¼pçç±»åé½æ¯int*ã
èå¨å çæ¶åï¼åªåpçç±»åæå
³ï¼ä¸ä»åªéèµå¼çæ å
³
æ以æ°ç»å并ä¸æ¯æ°ç»é¦ä¸ªå
ç´ çå°åï¼è½ç¶å°åå¼ä¸æ ·ï¼äºç»´æ°ç»åçå«ä¹å®é
æ¯æ°ç»é¦è¡çå°åã
æèªå¦ç书ä¸é½æ²¡æè¿äºç¥è¯ç¹ï¼è¯·é®ææ¨èçèªå¦ä¹¦ç±åï¼
æ以æ°ç»å并ä¸æ¯æ°ç»é¦ä¸ªå
ç´ çå°åï¼è½ç¶å°åå¼ä¸æ ·ï¼äºç»´æ°ç»åçå«ä¹å®é
æ¯æ°ç»é¦è¡çå°åã
-----æ¯è¿æ ·ç
æèªå¦ç书ä¸é½æ²¡æè¿äºç¥è¯ç¹ï¼è¯·é®ææ¨èçèªå¦ä¹¦ç±åï¼
---å
¥é¨ä¹¦ä¸è¬æ²¡è¿äºï¼å®¹æä¹±ï¼æ¾äºè¿é¶çå§ï¼æè
å®æä¸æé«
----åå¤è¯è®º:å¼é½æ¯nè¡é¦å°åï¼ä½ç±»åä¸å
a+n表示第nè¡çé¦å°å,*(a+n)表示nè¡é¦ä¸ªå ç´ å°åï¼
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 −...
c语言中二维数组地址疑问
从二维数组的角度来看,a代表二维数组首元素的 地址,现在的首元素不是一个整型变量,而是由4 个整型元素所组成的一维数组,因此a代表的是首 行的起始地址(即第0行的起始地址,&a[0]),a+1代 表a[1]行的首地址,即&a[1]。因此a[0]代表一维数 组a[0]中0列元素的地址,即&a[0][0]。a...
C语言地址运算问题
1. 地址加整数:整数表示移动的单位数。对于二维数组,例如定义了一个数组 `a[][]`,`a` 能代表数组的一行,`a+1` 表示向后移动了一行,即 `a[1]`,也就是 `a[1][0]` 的地址。2. 数组元素管理:`a[i]` 是以单个元素为单位进行管理的,`a[i]+1` 表示以 `a[i][0]` 为起始...
c语言的二维数组地址问题
答:二维数组a[3][4]中,a[1]+1是数组a[1]的第2个元素的地址,a[0]+4是数组a[0]的第5个元素的地址,但a[0]只有4个元素,所以a[0]+4就是a[1]首元素的地址,因此这是两个不同的地址。另外,也可以将二维数组a[3][4]看成一维数组a[12],那么原来的a[1]+1就是一维数组的a[5...
二维数组的地址问题
>>这句没错. 任何情况下, *(p+n)都等效于p[n]2、书中写a+n表示第n行的首地址,那是相当于&a[n]吗,a不是表示数组首个元素地址吗,怎么+n不是元素位置改变,却是位移了行?>>这个上面说过了, 核心在于指针的类型. 二维数组int a[M][N]的数组名a, 本质上是常量的int (*)[N]类型...
C语言二维数组问题,求教!!!
c中数组小标从0开始,A【4】【3】相对于A【0】0的偏移量为4*6+3=27,那么地址应该为:100+27*16(2个字节)=1432 FORTRAN从1开始,那么A【4】【3】相对于首地址的偏移为3*6+2=20,那么地址应该为:100+20*16=1320 很久没接触这个了,不是太肯定,仅供楼主参考。希望能帮到楼主。数据项...
c语言二维数组字节问题 求大神解答
数组名代表数组的地址,也就是第一个数组元素的地址(此题中为a[0][0]的地址)。a+1也就是&a[0][0]+1即为&a[0][1]了,是在列上变化,数组元素是int型,所以是2个字节(这不准确,在新的编译器上,int可能是4个字节)。而a[1]是行地址,即a[0],a[1],a[2]这三个都是行地址,...
C语言地址运算问题
地址+整数,这里的整数代表的是向后移动的单位数,二维数组的各个地址是这样的:比如定义了一个数组a[][],a能够为数组的一行代言,a+1就向后走一行变成a[1]了,也就是a[1][0]的地址,a[i]是以单个的元素为单位进行管理的,那么a[i]+1就是以a[i][0]为起始点向后走一个元素所占的字节...
c语言中二维数组a[i][j],为什么a=*a?
二维数组a定义为a[i][j]时,代表一组数据,有i行j列,共计i*j的元素。这组数据在内存中是连续存放的。而在C语言的使用中,a是二维数组的首地址。*a也就是a[0],是二维数组第一行的首地址。所以,二者是相同的地址值,即数据a[0][0]的地址值。也就是说,从值上,a,*a, a[0],&a[...
C语言二维数组的问题,那个(4)(5)表示啥?
a和a[0]二者都代表a[0][0]的地址,即&a[0][0]。所以&a[0][0]+4*i+j(4)与a[0]+4*i+j(5)相同,都是a[i][j]的地址。