C++的基础语法

堆空间分配
C语言中 malloc realloc , 分配堆空间, free释放堆空间
c++语音中 用new分配堆空间, 用delete释放堆空间(类)

char* p = malloc(100) ; 分配100个字节堆空间 free§;
int q = malloc(1004); 分配100个整形数空间 free(q);

char* p = new char(‘A’) ; 申请一个字节的堆空间并且初始化为‘A’ 释放delete p
char *p = new char[100] 申请100字节的堆空间,释放delete []p --释放连续空间

int *q = new int(10) ; delete q;
int *q = new int[100]; delete []q;

#include
#include

int main(void)
{
//申请堆空间
char *ptr = new char[100];
std::cin>>ptr;

for(int i=0; i<strlen(ptr); i++)
{
	std::cout<<*(ptr+i)<<" "<<ptr[i]<<std::endl;
}
//释放堆空间
delete []ptr;


int *p = new int(100);//申请一个整数空间并且初始化为100
//*p = 100;
std::cout<<*p<<std::endl;
//释放空间
delete p;
return 0;

}

new和delete在申请空间的时候—自动调用构造方法, 和析构方法

练习;
编写一个函数用来分配堆空间 void get_mem(int **ptr, size_t size)
在主函数中测试,从键盘输入多个整形数存储在ptr申请的堆空间中,
编写一个函数计算这个数组中的所有元素和 int array_sum(int *ptr, size_t size);
在主函数中释放空间,并且输出结果
int main(void)
{
int *ptr = NULL;
get_mem(&ptr, 10);
//输入数据
int sum = array_sum(ptr, 10);
std::cout<<sum<<std::endl;
delete []ptr;
return 0;
}
练习代码:mem_test.cpp

命名空间(名字空间)
给数据空间名一个名字,避免变量名冲突
定义名字空间A
namespace A
{
int data = 0;
}

1.名字空间嵌套
2.不同文件中同名的名字空间属于同一个
3.匿名名字空间:为了解决部分全局变量或函数只能在本文件中使用,不想在其他文件使用,也不想与其他文件中的变量函数名冲突

4.using 声明, using指示符
namespace Exercise
{
int ivar = 0;
double dvar = 0;
const int limit = 1000;
}
int ivar = 0;
//1
void manip()
{
using Exercise::ivar;//>>int ivar = 0;
using Exercise::limit;
//2
double dvar = 3.1416;
int iobj = limit + 1;
++ivar;
++::ivar;//使用全局ivar
}
//如果将名字空间Exercise 成员的using 声明放在//1 处那么会对代码中的声明和表达式有什么样的影响
//如果放在//2 处呢当用using 指示符代替名字空间Exercise 的using 声明时答案又是什么?

引用-----变量的别名(本身不占用内存空间) 张三(变量)----老张(引用)

定义应用:
数据类型 &引用名 = 变量/常量 —数据类型必须与变量/常量类型一致
int a = 1;
int &b = a; ----b就是a的引用,b与a共用空间 ,引用定义的时候必须初始化
引用大小------sizeof(b) == sizeof(a)

引用作为函数参数(函数传参方式—传值, 传地址, 传引用)

练习:定义变量的引用, 输出引用的地址,和变量的地址,通过引用来修改变量的值,
输出用sizeof计算引用大小

//传引用
void swap(int &a, int &b)
{
//int &a = m; 引用定义
//int &b = n;
int t = a;
a = b;
b = t;
}
int m = 100;
int n = 123;
swap(m, n);

const 修饰引用
int add(const int &a, const int &b)
{
return a+b;
}

1.如果被引用的对象是常量, 那么引用必须要用const修饰
const int a=123;
const int &b = a; const int &m = 100;

2.函数返回值为引用(函数调用完后返回值本身还存在就可以返回引用,如果不存就不能返回引用)
int& calc(int a)
{
a++;
return a;
}

猜你喜欢

转载自blog.csdn.net/qq_41256954/article/details/88964664