栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 第二课作业

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 第二课作业

1.C++结构体

     1.1C++结构体中是允许函数的存在 ,该函数体可以在结构体内定义,也可以在结构体外定义

#include
using namespace std;
struct fox
{//数据成员,属性,特征
int age;
char name[20];

//函数成员,方法
void printdata()
{
cout< 

 1.2

  结构体的数据访问必须通过结构体变量(结构体指针)进行访问 

 C++结构体中的函数访问属性,可以直接访问

#include
using namespace std;
struct fox
{//数据成员,属性,特征
	int  age;
	char name[20];
	//函数成员,方法
	void print()
	{
		cout << name << "t" age = 3;
	p->print();



}

 1.3 在C++中struct 声明了类型之后,定义结构体变量的时候 可以省略关键字struct

  所以上面的代码 可以去掉strcut  如下图所示

int main() 
{
	fox foxone = { 18,"狐狸" };
	foxone.print();//这个就是直接访问 它可以直接访问foxone 这个结构体里面的数据
	fox* p = &foxone;
	p->printData();//通过结构体指针去操作
	p->age = 3;
	p->print();
}

2.动态内存的申请与释放

 和C语言的动态内存概念基本没有差距,无非关键字变成了new,释放变成delete

 语法是 new  要申请的类型 [大小];

int main() 
{
    char str2[20] = "Iloveyou";
	char* str = new char[20];//申请char 20字节
	strcpy_s(str,20,str2);
	cout << str << endl;
}

释放也是一样的

int main() 
{
    char str2[20] = "Iloveyou";
	char* str = new char[20];
	strcpy_s(str,20,str2);
	cout << str << endl;
	//delete str;上下两种写法效果是一样的
	delete[]str;
	str = nullptr;
}

delete 和delete [ ] 效果是等效的,只是为了增加代码的可读写,有方括号,代表释放是连续的一段内存段

记住一点  申请之后 释放顺序是反过来的

 2.1  内存池 (顾名思义我申请一段大内存,我需要的的时候从这个内存池中分配出来)

         在C语言里面malloc 申请是堆区内存,C++ new是自由存储区

        

int main() 
{
	char* memorySum = new char[1024];//我申请一个很大的内存
	double* pnum = new(memorySum) double[3];//我从memorySum申请double数据*3,我可以区使用它了
	pnum[1] = 1.0;
	pnum[0] = 0.0;
	pnum[2] = 2.0;//正常使用
	cout << pnum[0] <<"t"<< pnum[1] <<"t"<< pnum[2] << endl;
	char* name = new(memorySum + 24) char[9];//中间加号看不懂,建议了解指针的偏移
	strcpy_s(name,9,"ILOVEyou");
	cout << name << endl;//我提前申请了一个大的内存,在需要进行分配
	//因为共用一段内存 ,释放头部就好了
	delete[]memorySum;
	memorySum = nullptr;
}

 3.string 类型

 C++string 包含头头文件是 //注意不是C语言的

  string 基本操作 拷贝 赋值 链接 比较

  string 创建,初始化,不带初始化,字符串创建;

#include
#include
using namespace std;
int main() 
{
	string str;//创建不带初始化
	string str1 = "Iloveyou";//带初始化
	string str2 = str1;//字符串创建
	str = str2; //赋值操作;
	//str基本操作 // 拷贝+赋值+ 连接+ 比较
	if (str==str2) //str可以直接比较 链接 赋值
	{
		cout << "相等" << endl;
	}
	str = str1 + str2;//连接
	cout << str << endl;
	//最重要的点是
	//str类型字符串中没有记录的位置,不要越界访问
	string str4 = "12345";//按照C语言中 这里的长度算上标记应该为下标0~5 也就是长度为6
	 //但是str没有记录 要注意不要超出下标越界访问
	cout << str4 << endl;
}

有一个问题:

str4下标【5】里面是应该有一个吗? 我多次打印下标5中的内容,未出现报错处理 

还望老师解答一下

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/512120.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号