c语言中二维数组(*a)[1]和*a[1]有什么区别,为啥他们的值不一样? C语言中 a>>=1 和a=a>>1有什么区别吗 谢啦

作者&投稿:长沙缸 (若有异议请与网页底部的电邮联系)
二维数组名是一个指向一个一维数组的指针,a是一个二维数组名,就是一个指向一维数组的指针,一个这样的指针求间接运输(*a),得带的是这个指针所指向的一维数组的数组名,在此是 a[0], 数组名加一个下标就是数组元素值,(*a)[1]就是 第0行数组的第1个元素 a[0][1]-->2
*a[1]->通过运算符优先级看,是先运算 a[1],也就是第1行的数组名,一位数组名是第0个元素的首地址,a[1]就是第1行元素a[1][0]的地址,*求间接运输,那么*a[1]就是 a[1][0]的值-->41

数组 a是 int**类型 (*a)就相当于解了一次引用 由于a是数组的首地址
所以就得到第一条 int* 相当于a[0] 然后再在这一条int*中求下标1 相当于a[0][1] = 2;
*a[1] 如果不熟悉运算符优先级的就会搞混 可以转成*(a[1])理解 a[1] 是一个int*类型 表示是第二条 在对a[1]解引用 就得到第二条int*的首个元素41

*和[]的运算符优先级不一样
(*a)[1]先 (*a),就是a[0],那么指代的就是a[0][1]=2
*a[1]先 a[1],再取值,那么指代的就是a[1][0] = 41

a[1]返回的是a的第二行,*a[1]就是第二行的第一个元素41
*a的含义不太明确,你可以把数组中1234换成2345,看看打印结果是什么?

c语言 a<<=1与a<<1有什么区别?~

c语言 a<<=1与a<<1的区别:
1、运算符号的含义不同
<<=是左移赋值运算符,a<<=b是把a的二进制数左移b位,然后把结果赋值给a;
<<是左移运算符,a<<b是把a的二进制数左移b位。
2、运算结果不同
a<<=1表示把左边运算数a的二进制数进行左移1位运算,然后把计算的结果赋值给a,会改变a的值;
a<<1表示把左边运算数a的二进制数进行左移1位运算,不改变a的值。
3、a<<=1和a<<1运算后的a的值不一样
举例说明:
a<<=1例子:假设a为11100101,那么进行左移1位运算后结果为11001010,然后把这个值赋值给a,那么a就变为11001010。
a<<1例子:假设a为11100101,那么进行左移1位运算后结果为11001010,但是a的值不变还是为11100101。

扩展资料:
<<、=运算符在C语言中的功能:
1、<<的功能
把“<<”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。如a<<b,则将数据a格比特位向左移b位,即左移a位就是将数据扩大至原来的2的a次方倍。
2、=的功能
对对象进行赋值,如a=b,则a的值为b。在c语言中也常常将赋值运算符=与其他的运算符结合起来,表示按照优先级顺序处理对象后,再对对象进行赋值。
参考资料:百度百科-C语言运算符

C语言为了使写法更方便,单条语句更简短,增加了缩写形式。
这两种方式是一样的,没有任何区别。
除此之外,还有a *= 1,a %= 1,只要是操作符都可以。

c语言中二维数组(*a)[1]和*a[1]有什么区别,为啥他们的值不一样?_百度...
答:二维数组名是一个指向一个一维数组的指针,a是一个二维数组名,就是一个指向一维数组的指针,一个这样的指针求间接运输(*a),得带的是这个指针所指向的一维数组的数组名,在此是 a[0], 数组名加一个下标就是数组元素值,(*a)[1]就是 第0行数组的第1个元素 a[0][1]-->2 a[1]->通...

计算机c语言中二维数组a[1]和a[2]分别代表什么
答:语句中 a[1] 表示 地址 &a[1][0], a[2] 表示 地址 &a[2][0].即二维数组a 的 第2行 元素 的 首地址 和 第3行 元素 的 首地址。

二维数组中a 1和*(a 1)的值为什么都是地址
答:a[1]第1行的行地址 a[1]第一行的第一个数。希望下面的程序可以帮到你:include<stdio.h>#include<stdlib.h>int main(void){ int a[2][2]={1,2,3,4}; printf("a= %d\t",a); printf("a+1=%d\n",a+1); printf("*a= %d\t",*a); printf("*a+1=%d\n...

C语言二位数组a[1]表示什么
答:int puts(char *string);其传入的参数是char*型的,也就是字符串。我不知道你的二维数组a[m][n]是什么,不过如果是字符串数组的话,a[1]应该表示第二个字符串(第一个是a[0]),所以puts(a[1])就是输出字符串啦。字符串数组肯定是二维以上的,a[1]表示字符串(其实这个值就是第二个字符...

C语言:二位数组中*(a[1]+1)是怎样等于a[1][1]的?
答:二维数组是一维数组的数组,对二维数组a来说,它的元素a[1]就是下标为1的一行数据,是个一维数组,而a[1]作为这个一维数组的名字,其实就是指向数组第一个元素的指针,即这一行的首地址。a[1]+1即a[1][1]的地址,因此*(a[1]+1)即间接访问a[1][1]。如果不能理解,不妨把a[1]想成另...

在二维数组中*a,a,a[0] ,a[0][0] ,a[1] ,&a[1] 的区别
答:1. *a:以a[0][0]为首元素的一维数组.可带一个索引:(*a)[i] 即a[0][i]2. a:以a[0][0]为首元素的二维数组.可带两个索引:a[i][j]3. a[0]:同*a 4. a[0][0]:首元素 5. a[1]:以a[1][0]为首元素的一维数组.可带一个索引.6. &a[1]:以a[1][0]为首...

c语言,二维数组a[5][5],则*a[1]表示啥
答:a[1]表示 a[1][0]的地址 即&a[1][0] 那么*a[1]就是 a[1][0]的实际数据 *a[1]=*&a[1][0]

在二维数组中*a, a,a[0] ,a[0][0] ,a[1] ,&a[1] 的区别
答:1. *a:以a[0][0]为首元素的一维数组。可带一个索引:(*a)[i] 即a[0][i]2. a:以a[0][0]为首元素的二维数组。可带两个索引:a[i][j]3. a[0]:同*a 4. a[0][0]:首元素 5. a[1]:以a[1][0]为首元素的一维数组。可带一个索引。6. &a[1]:以a[1][0]为首...

C语言的程序输出题、求解释cout<<*(a[1]+2)这一句、为什么是6?先谢了...
答:a[1]可以看成是第二行的首地址(C语言中是从第0行开始的),然后在这个地址为起点又加了2,表明是第二行的第三个地址,然后加个指针自然就输出6了,希望对你有帮助!

C语言中一个二维数组 它的数组名是a 那a和*a有什么区别?
答:对于二维数组名a和*a,二者的区别在于类型不同。对于 TYPE a[M][N];当使用a时,可以等同于二级指针TYPE **型。而使用*a时,等同于TYPE*型。从概念上说,a表示二维数组a的首地址,而*a表示二维数组a第一行a[0]的首地址。这样在使用的时候就有所区别。比如 对a的操作a[4]表示a的第四行首...