数组与指针互访

有几个难点,指针:二重指针、一重指针、一维数组
二重指针:它指向的值还是指针
一重指针:它指向的值可以解引用*,得到数值,但一定要知道指针的类型。不然编译器元法知道如何解析的哪段内存。
一维数组:就是一段连续的内存,数组名也是数组头指针。

C++11新增alignas关键字作用

alignas关键字用来设置内存中对齐方式,最小是8字节对齐,可以是16,32,64,128等。
test2占用16字节,对齐方式alignas(8)?
test3占用16字节,对齐方式alignas(16)
test4占用32字节,对齐方式alignas(32)
计算方法就是对齐数的整数倍,比如32位对齐,实际数据大小不到32字节,但内存还是占用32字节。实际数据大于32字节小于64字节,内存占用64字节。

C++11新增alignof关键字作用

计算机系统可能限制数据在内存中的存储方式。例如,一个系统可能要求double值存储在编号为偶数的内存单元中,而另一个系统可能要求其起始地址为8个整数倍。运算符alignof将类型作为参数,并返回一个整数,指出要求的对齐方式。例如,对齐要求可能决定结构中信息的组织方式,以方便用于跨平台编程等。

内存操作函数

string>和中定义了内存操作函数,以下是常用的内存操作函数。void* memchr(void* __p, int __c, size_t __n);在内存中查找指定字符串int memcmp(const void*, const void*, size_t);比较两块内存中的字符void* memcpy(void*, const void*, size_t);拷贝源内存块至目的内存块void* memmove(void*, const void*, size_t);移动源内存块至目的内存块void* memset(void*, int, size_t);使用指定数值设置内存块的内容void* malloc(size);分配一块内存void* calloc(size,n);分配size*n字节的内存,并清零void free(void*);释放分配的内存下面写个内存操作函数运用代码实例:

C标准类型转换函数

头文件中定义了类型转换函数,比如将字符转浮点、转整型等。double? atof(char* a);将字符串a转换成浮点数并返回这个浮点数int atoi(char* a);将字符串a转换成整数并返回这个整数long atol(char* a);将字符串a转换成长整数并返回这个长整数char* ultoa(unsigned long value,char* str, int radix);将无符号整型数value转换成字符串并返回该字符串,radix为转换时所用基数char* itoa(int value, char* string, int radix);将整数value转换成字符串存入string,radix为转换时所用基数double strod(char* str, char** endptr);将字符串str转换成双精度数,并返回这个数long strtol(char* str,char** endptr,int base); 将字符串str转换成长整型数,并返回这个数

C++11新增关键字nullptr

nullptr关键字就是表示空指针的意思,C++11之前空指针都是NULL。已经有了NULL哪为什么还要有nullptr关键字?
nullptr表示空指针,不能转换为整型类型。为了向后兼容,C++11仍允许用0(NULL)来表示空指针。建议使用nullptr而不是0(NULL),因为更高的类型安全。

C++11函数返回类型后置

C++11新增一种函数声明语法,在参数列表后面指定返加类型。double fun1(double , int); //C++11之前函数声明方式
auto fun2(double, int) ->double; //C++11新增函数声明方式

//auto在这里只是占位符,没有其它意义大家看了估计会讲,C++11新增的函数声明方式看起来并不好,还没有之前的直观。哪为什么要新增一种函数声明方式?
不用返回类型后置的例子
先写个返回类型后置的例子,再来讲为什么要这样。