1.const char*str不能修改内存
可以来接受字符串字面常量
substr的字符串实现机制,利用const char*str可直接输入初始化值
让我们来举个例子
#define _CRT_SECURE_NO_WARNINGS//因为一些老的.c文件使用了strcpy,scanf等不安全的函数必须在表头
#include
#include//strcopy实现机制
using namespace std;
const char*substr(const char*, int, int);//返回类型与定义一致
int main()
{
const char* str;//定义可改字符指针常量
int begin, end;
cin >> begin >> end;
cout<//山大小李是个好男孩
}
const char*substr(const char* str1, int a, int b)
{
char* ret;//定义char类型指针来存储值
int len = strlen(str1);
if (a<1 || b<1 || a>len || b>len)//简单的情况罗列排除
return nullptr;//直接返回空指针
ret = new char[len - a + 2];//关联数组
strcpy(ret, str1 + a - 1);//将str+a-1地址值之后的全部进入ret
ret[b - a + 1] = '\0';//补成字符串结束识别符
return ret;
}
效果::
2.利用引用变量int &rodents=rats
可使不同标识符指代同一内存空间(取地址相同)
**** 本名和别名必须是同一类型
引用变量必须按定义时初始化(紧跟!!!)
3.swap函数的实现方式
a. 指针类型
b. 引用类型(int&,int&)引用类型传参按引用传参(不用按指针取地址)
骚操作:直接等价变量(避免只修改形参的麻烦)
不用按指针解引用
引用类型实质
int*p; int a;
int a; int&b=a;
p=&a; b<=>a
(*P)<=>a
4.结构体struct
struct作用受到块作用域的限制
结构体后一定加上分号;而自定义类型名不加分号
当声明变量后自动分配一大块内存,按照不同的方式解读(优势点)
系统希望int类型变量的首地址是四的倍数,故内存不一定是各变量地址总和
数组和字符串不能赋值(得用strcopy)
而结构体可以赋值
可令结构体类型名下的两个变量相等
cin不能输入带空格内容
结构体中指针或动态数组变量关联值会同时修改
输入字符串利用cin.getline实现