c语言指针a+i)+j)什么意思a+i)为什么

2021-02-26 19:47:44 字数 4002 阅读 1393

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楼 马路瑶 举...