C语言指针问题

如有定义char y[4]= "321",则表达式 *y+2的值是 。
如有定义char z[2][4]={"MAT", "LAB"};,则表达式*(*z+2)的值是 。
如有定义char y[4]="321",*py=&y[0],则表达式*(py+2) 的值是 。

一、如有定义char y[4]= "321"
表达式 *y+2的值是'5' 。
分析:y是字符串数组首元素'3'的地址,*y的值就是字符'3',再加上2,就是字符'5'(也可以说是字符'5'的ASC码值)。
二、 如有定义char z[2][4]={"MAT", "LAB"};,
则表达式*(*z+2)的值是 'T'。
分析:z是二维字符串数组首字符串“MAT”的地址,*z的值就是“MAT”首元素字符'M'的地址,再加上2,就是字符'T'的地址,再取值,得到的就是字符'T'。
三、如有定义char y[4]="321",*py=&y[0],
则表达式*(py+2) 的值是'1' 。
解析:py是y(0) 的地址,py+2是地址加2,就等于y(2) 的地址了,再取值,得到元素y(2) 的值'1'。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-11

    如有定义char y[4]= "321",则表达式 *y+2的值是.

    首先*的运算优先级是大于+的,所以先计算*y,在数组表述中,变量名即是第零个数组元素的起始地址,那么*y就标识取得第零个数组元素,*y='3',那么*y+2='5'.

    如有定义char z[2][4]={"MAT", "LAB"};,则表达式*(*z+2)的值是.

    此问中变量z为二维数组,即2个包含4个元素的数组,2行4列,先计算*z,第一问中提到*z为数组第零个元素,那么*z=z[0]="MAT",即第零行元素,此时*z表示第零行元素的起始地址,*z+2则表示第零行第二个元素的地址,那么*(*z+2)则表示第零行第二个元素,即‘T’。

    如有定义char y[4]="321",*py=&y[0],则表达式*(py+2) 的值是 .

y[0]表示第一个元素,即'3',&y[0]则表示第一个元素的地址,py=&y[0]后py的值就是y数组第零个元素的地址,那么py+2则表示第二个元素的地址,*(py+2)就表示第二个元素,即'1'.

第2个回答  2019-06-11

*y+2 = 0x35 = '5'

*(*z+2) = 0x54 = 'T'

*(py+2) = 0x31 = '1'

好好学习天天向上

第3个回答  2021-05-12

C语言_071_指针的定义和使用_上

第4个回答  2020-01-07