1楼:匿名用户
没有上下文,你的“a不应该已经是地址了么”毫无根据。
“a+i为什么不是地址”
从这里的用法来看,a+i就是地址。
你对“地址”“数据”的概念还是一团浆糊啊。地址其实也是数据的一种。
2楼:匿名用户
其实是可以把*(*(a+i)+j)看出是二维数组的一个值:a[i][j]。
*(a+i)看出a[i]这是一维地址,a是二维地址。
对于a+1不好判断,以数组解释不通,以指针又解释德通,我就不评价了。
3楼:蟹黄_包
看起来像是取一个叫a的二维数组第i行第j列的值。
c语言中a+i是地址吗,书上说a+i是a[i]的指针,既然这样,那么*(a+i)为什么还是
4楼:
a+i其实就是&a[i],肯定是地址
*(a+i)其实就是a[i],如果a是二给数组的数组名,a[i]就肯定是地址(等同于&a[i][0]),如果a只是一维数组(指针数组除外)的数组名,a[i]就不是地址(原因是:二维数组可以看作是多个一维数组组成,即数组的数组)
*(a+i)+j就是&a[i][j],如果数组a是二维数组那就肯定也是地址啦
a[i][j]则是表示为*(*(a+i)+j)
5楼:匿名用户
a应该是指的数组名字吧
你首先应该知道数组名字本身就是地址了
a+i是说a的地址向后在移动i个位置
也就是a[i]
a是指的数组的首地址,开头的位置
*(a+i) 也就是*a[i] 也就是a[i]的地址,只是这个地址离首地址偏移了i位置
再加上j 就是 a[i][j]地址
*(a+i)+j是针对二维数组来说的,也可以说是特殊的一维数组。
6楼:赛罡谏阳泽
是地址,你要取值是要*(
*(a+i)+j)的
*(a+i)其实就是a[i][0]的地址
为什么c语言中*(a+i)+j能表示a[i][j]的地址
7楼:
int a[3][4]; //假设定义一个3行4列的二维数组,所谓二维数组就是数组的数组
a[0]、a[1]、a[2]是数组a的元素,而这个元素是数组,而不是我们通常认为的基本数据类型的数据
所以*(a+i)就是获取数组a中第i个元素,等价于a[i],而a[i]本身又是一个包含有4个int型数值的数组,a[i]是这个一维数组的数组名,我们知道数组名的本质是一个地址,是数组首元素地址,所以
*(a+i)+j就是表示下表第i行的第j个元素的地址了。所以,
*(a+i)+j表示的含义是元素a[i][j]的地址,也可以用a[i]+j来表示。
8楼:听不清啊
int a[2][3]=;
printf("%d ",*(*(a+1)+2));
以上的引用能够输出60
因为a是二维数组名,所以它是指向指针的指针(二级指针)。
*(a+1)就是a[1],它是一个一维数组,也是一维数组的首地址(指向一维数组首元素的指针)。*(a+1)+2就是a[1][2]的地址,*(*(a+1)+2)就是a[1][2]。
9楼:匿名用户
*(a+0)取出a[0]的值
a[0]的元素又是一个一维数组
因此*(a+0)取出的就是这个一维元素的首地址那么*(a+0)+0表示: 一维数组a[n]中, a+0数组元素a[0]的地址
*(a+0)+1表示一维数组的1号数组元素的地址
c语言中二维数组的引用和地址有什么区别吗?比如a[i]地址&a[i],a+i,p+i,引用a[i],*(a+i)(这不应该是地址吗
10楼:焚书煮面帅
你这种情况比较复杂!一个数组
名本身是一个常量地址,比如数组a[10],a就是该数组在内存分配空间的起始地址。要引用数组中各个元素。a[i]是数组专用的方法,它本身就是指a往后偏移i个长度内存空间里存放的内容,因此用&取地址就变成了该内容对应的地址;也可以用*(a+i),a+i指从地址a偏移i个长度(此长度不是字节,取决于数组存储的元素类型)的地址(注意此时它不是指里面的内容),因此加上*以取到里面的内容。
也就是说a[i]指内容,因此可以用&取其地址;而a+i指地址,因此可以用*取其内容,二者形式不同,都可以一样用。
我是这样理解的,仅供参考。
c语言中{t=*(a+i); *(a+i)=*(a+j); *(a+j)=t;}代表什么意思啊 谢谢了
11楼:匿名用户
a是一个指针,a+i表示a所指位置的下i个内存区,a+j同理。这个程序的功能是: 交换 a+i 和 a+j 所指内存内区的内容,
容t是中间变量。 就好像你要交换两瓶饮料,一瓶汽水,一瓶果汁,交换它们,要找一个空瓶子,这里,t就是空瓶子 a+i 和 a+j 就是你要交换的两瓶饮料,一共要倒三次,你懂了吧!
12楼:匿名用户
交换数据。交换(a+i)所指的元素和(a+j)所指的元素的值,用的是“水桶算法”。
13楼:匿名用户
通过中间变量t,交换变量i和j 的值
c语言中 二维数组@a[i][j]的地址为什么可以表示成*(a+i)+j难道*(a+i)还表示一个地址的值?求高手详细解释
14楼:匿名用户
依据《c语言深度剖析》“多维数组与多级指针”章节 原文如下:
以数组下标的方式来访问其中的某个元素:a[i][j]。编译器总是将二维数组看成是一个
一维数组,而一维数组的每一个元素又都是一个数组。a[3]这个一维数组的三个元素分别为:
a[0],a[1],a[2]。每个元素的大小为 sizeof(a[0]),即 sizof(char)*4。
由此可以计算出 a[0],a[1],a[2]
三个元素的首地址分别为& a[0],& a[0]+ 1*sizof(char)*4,& a[0]+ 2*sizof(char)*4。亦即 a[i]
的首地址为& a[0]+ i*sizof(char)*4。这时候再考虑 a[i]里面的内容。就本例而言,a[i]内有 4
个 char 类型的元素,其每个元素的首地址分别为&a[i],&a[i]+1*sizof(char),
&a[i]+2*sizof(char),&a[i]+3*sizof(char),即 a[i][j]的首地址为&a[i]+j*sizof(char)。再把&a[i]
的值用 a 表示,得到 a[i][j]元素的首地址为:a+ i*sizof(char)*4+ j*sizof(char)。同样,可以换
算成以指针的形式表示:*(*(a+i)+j)。
15楼:问号朵朵
表达错误,差1错误:
a[i][j]的地址应该表示为:*(a+i-1)+j-1
例:int a[3][4]; 则:
*(a):表示第一行的首地址,即:(*(a))[0],表示第一行第一个元素地址,值为:*((*(a))[0])。
*(a+1):表示第二行的首地址,即:(*(a+1))[0],表示第二行第一个元素地址,值为:*((*(a+1))[0])。
*(a+2):表示第三行的首地址,即:(*(a+2))[0],表示第三行第一个元素地址,值为:*((*(a+2))[0])。
*(a+3-1)+4-1:表示最后一个元素的地址。它的值是:*(*(a+3-1)+4-1)
16楼:陈宗权
a是一个二维数组,a[i]表示其中的一行,是个一维数组,a[i][j]表示一行里面的一个元素。
*(a+i)就是a[i],是一个一维数组,当然表示一个地址,表示这个一维数组里面的第一个元素a[i][0]的地址。
17楼:涓涓细流
在这里,*a[i]是一个指针变量,它指向含j个元素的一维数组。
c语言for(i 0,j 10 ij,i-j ij中ij是什么意思
1楼 匿名用户 for 循环中间的语句是循环结束的条件 是个bool值,true和false i逗号表达式 就是逗号分隔的若干个表达式,逗号表达式最后的结果是 最后一个表达式的值 也就是i j的值 c语言中 非0为真,0为假 也就是i j 为0整个循环就结束了 2楼 匿名用户 判断循环是否结束的条件...
在C语言中“a b”是什么意思,c语言中,a^b是什么意思?
1楼 匿名用户 a 异或 b 按位异或 比如 a 为 5 0101 b 为 7 0111 0010 对应位相同为0, 不同为1 希望对你有帮助。谢谢 c语言中,a b是什么意思? 2楼 匿名用户 按位异或, 例如 include int main 输出结果是8 1010 10 0010 2 1000...
Im a pig.是啥意思,请问I' m a pig .是什么意思啊
1楼 瑜笑嘻嘻 楼主不厚道啊 太坏了,这句话的意思是 wo是一只猪。。。 唉 我太善良了。。。 2楼 百度用户 意思你 你是猪 i 第一人称 从你嘴里说出来 那第一人称就是你自己对自己的称呼。 a 一个,数量词。 pig猪。总体来说你说 i m a pig 意思就是你说自己是一头猪 3楼 马路瑶 举...