C++面向对象入门:实验一
一、实验目的
-
学习动态内存分配的原理与指针变量的使用;
-
了解并掌握引用的定义和用法;
-
学习指向结构体变量的指针使用方法;
-
学习指针算法在数组中的应用;
-
动态数组的内存管理、查找和交换。
二、实验内容
1. 动态内存分配与指向它的指针变量实例
输入并运行程序,运行出结果,并解释每行程序的作用。
#include<iostream>
using namespace std;
int main(){
int *pa,i;
pa=new int[5];
if(pa==NULL)
exit(0);
*(pa+1)=3;
for(i=0;i<5;i++)
cout<<*(pa+i)<<" ";
delete[] pa;
return 0;
}
1.1 程序分析
int *pa,i; 声明整型指针pa和整型变量i
pa=new int[5]; 动态分配5个整数的数组空间
if(pa==NULL) 条件判断内存是否分配成功
exit(0); 分配失败则退出
*(pa+1)=3; 给数组中的第二个元素赋值为3
for(i=0;i<5;i++) 循环遍历数组中的所有元素
cout<<*(pa+i)<<" "; 输出数组中的各数,中间空格隔开
delete[] pa; 释放动态分配的内存
return 0; 结束
1.2 运行结果
-842150451 3 -842150451 -842150451 -842150451
2. 引用的定义和使用实例
输入并运行程序,运行出结果,并解释每行程序的作用。
#include<iostream>
using namespace std;
int main(){
int n=10;
int &rn=n;
cout<<"n="<<n<<endl;
cout<<"rn="<<rn<<endl;
cout<<"&n="<<&n<<endl;
cout<<"&rn="<<&rn<<endl;
return 0;
}
2.1 程序分析
int n=10; 定义整型变量n并赋值为10
int &rn=n; 定义rn为n的引用
cout<<"n="<<n<<endl; 输出n的值
cout<<"rn="<<rn<<endl; 输出rn的值
cout<<"&n="<<&n<<endl; 输出n的地址
cout<<"&rn="<<&rn<<endl; 输出rn的地址
return 0; 结束
2.2 运行结果
n=10
rn=10
&n=00B3FE9C
&rn=00B3FE9C
3. 指向结构体变量的指针应用实例
输入并运行程序,运行出结果,并解释每行程序的作用。
#include<iostream>
using namespace std;
struct student{
long int num;
char name[4];
float score;
};
int main(){
student stu={89031,"LiL",96};
student *pstu=&stu;
cout<<stu.num<<" "<<stu.name<<" "<<stu.score<<endl;
cout<<pstu->num<<" "<<pstu->name<<" "<<pstu->score<<endl;
cout<<(*pstu).num<<" "<<(*pstu).name<<" "<<(*pstu).score<<endl;
return 0;
}
3.1 程序分析
struct student{ 定义student学生结构体
long int num; 定义长整型变量,学号
char name[4];定义一个4个字符的数组,姓名
float score;定义浮点数变量,成绩
};
int main(){
student stu={89031,"LiL",96}; 定义并初始化结构体变量
student *pstu=&stu; 定义结构体指针指向stu
cout<<stu.num<<" "<<stu.name<<" "<<stu.score<<endl; 访问上面定义的三个变量
cout<<pstu->num<<" "<<pstu->name<<" "<<pstu->score<<endl; 再使用指针箭头访问
cout<<(*pstu).num<<" "<<(*pstu).name<<" "<<(*pstu).score<<endl;
return 0;
3.2 运行结果
89031 LiL 96
89031 LiL 96
89031 LiL 96
4. 程序设计
定义一个动态整型数组(数组的长度由用户输人),循环为数组元素赋值。使用指针将数组中最小的数与第一个数交换,最大的数与最后一个数交换,输出交换后的数组元素。
4.1 源程序代码
#include<iostream>
using namespace std;
int main(){
int n;
cout<<"数组长度:";
cin>>n;
int *arr=new int[n];
cout<<"需要输入"<<n<<"个数";
for(int i=0;i<n;i++){
cin>>arr[i];
}
int *min=arr;
int *max=arr;
for(int *p=arr+1;p<arr+n;p++){
if(*p<*min){
min=p;}
if(*p>*max){
max=p;}
}
if(min!=arr){
int t=*arr;
*arr=*min;
*min=t;}
if(max!=arr+n-1){
int t=*(arr+n-1);
*(arr+n-1)=*max;
*max=t;}
cout<<"输出:";
for(int*p=arr;p<arr+n;p++){
cout<<*p<<" ";}
cout<<endl;
delete[] arr;
return 0;
}
4.2 程序分析
首先定义一个数组长度变量n,之后输入具体长度、动态分配n个整数的数组。再向数组输入规定个数的元素,用一个循环读取所有元素。然后分别定义一个最小值和一个最大值的指针,经过遍历找到对应的最小值后更新出一个新的最小值、同样找到最大值后更新出一个新的最大值。
条件判断:如果目前的最小值不在第一位则与第一位交换;如果最大值不在最后一位则与最后一位交换。交换完成后用指针遍历输出各元素,最后释放动态数组内存,返回结束。
三、实验总结
通过实验进一步掌握动态内存的分配和释放,理解引用的定义和用法,并且巩固了对结构体指针的访问方式,也明白了如何解决指针和数组相结合的实际问题。
By @哈娜Official(HanaNováčková:https://www.cnblogs.com/hanina-chata/p/19547852)
posted on 2026-01-29 13:15 HanaNováčková 阅读(2) 评论(0) 收藏 举报
浙公网安备 33010602011771号