C++习题三——指针与数组 – 作者:Johnson666

1.改错题

修改以下程序,并给出正确代码及运行结果(截图):
(1)键盘输入n个整数,并逆序输出。
image.png代码:
image.png结果:
image.png

(2)输出打印二维数组中的值。
image.png代码:image.png结果:
image.png(3)利用指针p将变量a的值修改为7。
image.png代码:
image.png结果:
image.png(4)利用指针p输出二维数组中的元素。
image.png结果:image.png代码:image.png

2.请在VC++6.0中编写以下C++程序,并给出代码及运行结果(截图)

(1) 从键盘输入n个整数(n<100),存放在一个一维数组中,逆序输出能被3整除的元素,并逆序输出数组下标为3的倍数的元素。

代码:
image.png结果:
image.png如果输入n大于100:
image.png(2)在主函数中输入一个字符串(长度不超过99),存储在一个字符数组中,将该字符串中的大写字母变成相应的小写字母,小写字母变成相应的大写字母,其他字符不变,输出转换后的字符串。

代码:
image.png结果:
image.png(3)从键盘输入3*3的二维数组,将该数组行列交换输出,并求交换后的二维数组的两条对角线元素之和,并输出。

代码:
image.png结果:
image.png(4)用指针完成程序编写:从键盘输入n个整数(n<100),找出最大元素的位置,并输出。

代码:image.png结果:image.png(5)用指针完成程序编写:将字符串“computer”赋值给一个字符数组,然后从第一个字母开始用“*”号间隔地输出该字符串。

代码:image.png结果:image.png

总结

1.数组与指针的定义:

数组: 有序的元素序列,数组名有限个类型相同的变量的集合命名。数组在内存中所占的大小由数组长度以及成员类型大小决定。
指针: 又称指针变量,在32位系统内存下占4个byte(64位系统内存下占8个byte),其中保存的值是某一块内存的地址。例:0x0000FF00

2.数组名与指针间的联系

在近乎所有使用到数组名的表达式中,数组名都表示数组第一个元素的地址,可将其看作是一个指针常量。而这个指针常量
所指向的类型与数组元素的类型一致。也正是因为如此数组名在表达式中不能作为左值,当其作为右值时其意义与&arr[0]是一致的。

在了解到数组名相当于是一个指针常量后,那么是否可以用一个指针变量去指向一个数组呢?当然可以!如以下代码所示:
int arr[5] = {1,2,3,4.5};
int *p = arr; //用指针变量p指向arr,p中存储的是数组首元素的地址。

当我们在对数组成员进行访问时就可以利用(数组名下标)以及(指针间接访问)两种方式,如以下表达式所示:

arr[ 1 ]; //访问数组中的第2个元素。(数组名下标)
*( arr+1 ); //与 arr[ 1 ] 作用相同。(指针间接访问)
*arr + 1 ; //*的优先级高于+,表示第一个元素的值+1。(指针间接访问)
arr[5]; //访问越界,产生随机值。(数组名下标)
2[arr]; //与 *(arr +2)作用相同。

3.请问 array 和 &array 有区别吗?

答:有。
解析:虽然 array 和 &array 的值相同,但含义是不一样的。array 表示数组第一个元素的位置,数组名虽然也是地址,但其地址
只是数组内第一个元素的地址,是!!数组首元素地址!!;而 &array 表示的是整个数组的地址(这里将数组看做一个整体),
是!!数组首地址!!。
注:数组的首元素地址:表示数组的首个元素的地址。
数组的首地址:表示整个数组的地址。

来源:freebuf.com 2021-04-01 14:09:30 by: Johnson666

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论