a+1和(a+1)有什么区别,c语言中,&a+1和&(a+1)的区别是什么

2020-11-26 08:33:33 字数 5934 阅读 2737

1楼:匿名用户

语句中,b = *a+1 -- 指针a 指向的数值加1,*a 是数值, b 等于 那个数值 加 1。

或 把a看成数组元素 b = a[0] + 1;

*(a+1) -- 指针 (a+1) 指向的数值b = *(a+1) -- 可以看成数组元素 b = a[1];

2楼:匿名用户

an和a的区别,用法区别

java中 a=a+1;和a+=1;有什么区别

3楼:匿名用户

(1)a=a+1,是先取a的值

,在进行加加操作。它等同于a++。

(2)a+=1,是先对a进行加1操作,在返回a的值。它等同于++a。

java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于pc、数据中心、游戏控制台、科学超级计算机、移动**和互联网,同时拥有全球最大的开发者专业社群。

java由四方面组成:

(1)java编程语言,即语法。

(2)java文件格式,即各种文件夹、文件的后缀。

(3)java虚拟机(jvm),即处理*.class文件的解释器。

(4)java应用程序接口(java api)。

*a+1和*(a+1)有什么区别

4楼:

语句中,b = *a+1 -- 指针a 指向的数值加1,*a 是数值, b 等于 那个数值 加 1。

或 把a看成数组元素 b = a[0] + 1;

*(a+1) -- 指针 (a+1) 指向的数值b = *(a+1) -- 可以看成数组元素 b = a[1];

5楼:匿名用户

int b[2];

int *a;

a=b; //a指向数组b首地址,暨b[0]的地址*a + 1 // *a就是取a指向地址的值,暨b[0],所以*a+1 == b[0]+1

*(a+1) // a+1,指针+1,就是指针指向下一个地址,暨b[1]的地址,所以*(a+1)== b[1]

6楼:匿名用户

*运算+运算

的次序有区别

前面是*先,后面是+先完毕

7楼:匿名用户

*a+1 是指针*a 加上1

*(a+1) 是在a+1位置上的指针

c语言中,&a+1和&(a+1)的区别是什么

8楼:匿名用户

语句中,b = *a+1 -- 指针a 指向的数值加1,*a 是数值, b 等于 那个数值 加 1。

或 把a看成数组元素 b = a[0] + 1;

*(a+1) -- 指针 (a+1) 指向的数值b = *(a+1) -- 可以看成数组元素 b = a[1];

9楼:匿名用户

a是指针?是的话,&(a+1)就是a指针指向的地方+1(类型)的位置;若是指向的是数组的话,&a+1就是增加整一个数组的地址了。比如int b[8],*a=b,&a+1就是增加4*8=32个字节了。

10楼:听不清啊

c语言中,

"a"占2个字节,一个'a'和一个'\0'(字符串结束符),它是一个字符串。

'a'就只占一个字节,即单个字符'a',它是一个字符。

11楼:匿名用户

c语言为了使写法更方便,单条语句更简短,增加了缩写形式。

这两种方式是一样的,没有任何区别。

除此之外,还有a *= 1,a %= 1,只要是操作符都可以。

12楼:我是你0爸

呃,,,楼上的各位都没有答到本质上 从本质上讲,“a”是一个指针常量,而'a'则是一个数值。也就是说,在编译器看来,“a”的值是一个地址(比如:0x84f39ea0),而'a'的值则是a的ascii码(即97)。

楼主用printf打印这两个值看看就知道了 另外,当“”里的字符串有多个字符时,它指向字符串的第一个字符。

13楼:匿名用户

&a+1是a的地址加上1,&(a+1)是(a+1)的地址

&是地址运算符和引用运算符

14楼:匿名用户

注意,后者是非法的。

15楼:匿名用户

int b[2];

int *a;

a=b; //a指向数组b首地址,暨b[0]的地址*a + 1 // *a就是取a指向地址的值,暨b[0],所以*a+1 == b[0]+1

*(a+1) // a+1,指针+1,就是指针指向下一个地址,暨b[1]的地址,所以*(a+1)== b[1]

16楼:燕清扬

例如a=2;

a++;输出结果为2;但是内存中它的值自加1了。(先输出a再运算)例如a=2;

++a;输出结果为3;内存中也是3.(先运算a再输出值)。

例如a=2;

a+=1;意思等同于a=a+1;

17楼:匿名用户

取a的地址加1

取a+1的地址

18楼:匿名用户

a++:a先创建自身的一个副本,然后a自增1,最后返回副本的值a+=1: 事实上相当于++a

a=a+1: 虽然有点雷同于a+=1,但不同的是此时右值的a和1做相加操作,形成一个副本然后赋值给a,所以有额外操作

++a:将a自增1并返回a

鉴于a++和++a的差别,c++primer建议用++a作为for循环的递增量。

以上讨论不仅限于int,还着重于对类的重载设计时的考虑。

19楼:认不倒你

&a+1 :a的下一个位置的指针

&(a+1): 错误

20楼:

事实上是一样的

a>>=1的意思就是a>>1并赋值给a;

可能执行的效率会有错

21楼:晓呈呈

a++ 先取值再自加

++a 先自加再取值

a+=1 等同 a=a+1

22楼:匿名用户

这里的a=&a[0][0];

a+1=&a[1][0],也就是过了一个a[0][1],因此是加了8个字节

&a+1是跳过整个数组的地址,也就是加了16字节

23楼:匿名用户

a是相当于a[0][n]

a+1是a[1][n]

n是几就差n*4个字节喽

a就是数组首地址地址

&a+1与&(a+1)的区别?为什么结果差那么远呢?详细点哈?

24楼:匿名用户

这个问题的关键是理解 &a

a是一个数组名,也就是数组的首地址。

对a进行取地址运算符,得到的是一个指向数组的指针!!!!这句话尤为重要!

也就相当于

int (*p) [5] = &a;

p是一个指针,它指向的是一个包含5个int元素的数组!!

那么执行p+1后,p的偏移量相当于 p + sizeof(int) * 5 !!

而程序中强制将指针p转换成一个int* 那么 p -1 其实就是 p - sizeof(int)

所以,p -1 指向了数组中得最后一个元素,也就是 5

25楼:匿名用户

第一个是一个加法计算题,第二个是乘题。结果当然不一样了。

&a+1

&(a+1)=&a+&

计算一下就出来了。

26楼:丶下里巴人

&a+1是a的地址加上1,&(a+1)是(a+1)的地址

&是地址运算符和引用运算符

c语言中的二维数组里a+1和*(a+1)为什么都是地址

27楼:刘文正粉丝

二维数组, int a[10][20];

a是一个指针的指针, 即二级指针.

一个指针加一个数, 当然还是指针(即a+1是指针)

取值一个二级指针, 是一级指针(即指针), 所以还是指针, 不过类型发生了变化.

a+1的类型为int *[10].

而*(a+1)的类型则为int *, 也就是平常的指针.

如果你学习二维数组是用心, 你就会知道不存在二维数组, 二维数组其实是一个包含数组的数组, 即数组的每一个元素还是一个数组(这点有点像面向对象的思维).

所以a[0]就是取第一个元素值, 而第一个元素是数组, 所以其值仍是一个指针.

答了这么多, 一看问题, 发现是"地址".....地址和指针是一个东西.

28楼:zh呼啸而过

例如a[5][10];

a + 1的值是第二行的首地址,

* (a + 1)得值也是第二行的首地址,但是a + 1不等于a[1],而* (a + 1)等于a[1]。

如果给a+1再加1,就是a+1+1,就是a+2,它的值是第三行的首地址

如果给*(a+1)再加1,就是*(a+1)+1,它的值是第二行的第二个地址

他们移动的区别:前者是纵向的,后者是横向的。

指针类型的区别:两者均存放为同一地址,但前者是指向一维数组,后者是指向元素的。

实际就是前者每次跳动4*10个字节,后者每次跳动4个字节。

29楼:twinkleh丶

a+1应该是 (a+0)+1

这里的a是二维数组中的二级指针

数组名为a[0]的一维数组(表示行)

也是数组名为a的一维数组(表示列)

后面的1表示行数组移动1行

0表示列的移动

所以是1行0列的地址

*(a+1)中a是二级指针

取值二级指针是一级指针

一级指针指向的一维数组(二维数组中的行)

一维数组移动一位只能是向下移动也就是行,

所以就是 第一行的首地址 也就等于二维数组中 第一行零列的地址

30楼:tlier丿残刀

二维数组又包含多个一维数组 a指向第一个一维数组的首地址就还是地址

数组名a+1和&a+1的区别

31楼:匿名用户

c/c++里面的数组名字会退化为指针,所以数组名a实际指的是数组的第一个元素的地址。而数组名作为指针来讲有特殊性,它正在它所指向的内存区域中,&a的值和a的数值是相同的(可以输出观察一下),但是类型和意义不同。而指针的加法操作和指向的数据类型密切相关。

比如:int a[10]; a就相当于int *,如果是对它加1(a + 1)是相当于a + 1 * sizeof(int)。但是&a的类型则相当于int **,是所谓指向数组的指针,是数组元素类型的二级指针,对它加1是相当于 &a + 1 * sizeof(a)的,所以会偏移一个数组长度。

定义有char *p, a[6][20];那么p=*(a+1)和*p=*(a+1)有什么区别

32楼:匿名用户

p是char*类型

a是二维数组 那么*(a+1)也即是a[1] 等效于char*于是p=*(a+1)这个是正确操作。 将第一行首地址,赋值给p而*p=*(a+1) *p是char类型, 赋值属于类型不匹配, 错误操作。

c语言中的二维数组里a+1和*(a+1)为什么相等?

33楼:匿名用户

它们只是值相等,但类型不相等,不能说它们相等。

a+1是int **类型,指向的是数组a的第二行的起始地址; *(a+1)是int *型,指向的是数组a的第二行第一个元素的地址。

c语言二维数组a,为什么a和(a+1)等

1楼 a 1 指针取得不就是地址吗 2楼 匿名用户 a 1 是定义的指针, 因为数组的起始地址a 0 可以用a来代替 所以a 1 和 a 1 是同一个地址 3楼 首先a代表整个数组的首地址没问题吧,a 1就是把地址下移, a 1 就是取其地址的内容。这回可以理解了吧! c语言中二维数组a i j 为...

C语言,定义二维数组a,则(a+1)表示什么a+5)表示什么

1楼 倒霉孩子改名啦 a 1 相当于a 0 1 , a 5 相当于a 0 5 已经越界了 c语言 二维数组 a 1 1 和 a 5 分别表达什么? 2楼 匿名用户 a 1 a 1 那么 a 1 1 a 1 1 a 5 a 5 c语言定义了一个二维数组a 5 3 用循环实现a 0 0 a 1 0 a ...

c语言中while(0)和while(1)分别是什么意思呢

1楼 匿名用户 while 0 就是一次都不执行循环,等同于while 0 0 while 1 就是永远执行循环,可以在循环中通过break跳出循环,等同于while 0 0 2楼 匿名用户 while 是c语言中的循环语句 例如while a 其中a如果是int值,即a 0时,while 里的语句...