万能指针
void* pv = NULL;
int a = 12;
char b = 'B';
float c= 3.14;
pv=&a;
std::cout<<*(int*)pv<<std::endl;
pv=&b;
std::cout<<*(char*)pv<<std::endl;
pv=&c;
std::cout<<*(float*)pv<<std::endl;
定义一个void *pv的空类型指针,此时他可以指向任何的数据类型,要对其输出时,只需带上指向的类型便可进行打印,上述代码输出分别为12、B、3.14。
柔性数组
using namespace std;
//定义一个Man结构体
struct Man {
int age;//年龄
char name[32];//姓名
int hobbyCount;//爱好的个数
const char *hobby[];//具体的爱好
};
//对结构体的大小进行动态分配内存
Man* Man_New(int n) {
Man* man = (Man*)malloc(sizeof(Man) + n * sizeof(char*));//根据爱好的个数分配内存
man->hobbyCount = n;
return man;
}
//对结构体中的元素进行初始化
void Man_Init(Man* man, const char *name, int age, const char* hobby[]) {
strcpy_s(man->name, name);
man->age = age;
for (int i = 0; i < man->hobbyCount; i++) {
man->hobby[i] = hobby[i];
}
}
//输出结构体中的信息
void Man_Show(Man* man) {
cout << "姓名:" << man->name <<endl;
cout << "年龄:" << man->age << endl;
cout << "爱好:";
for (int i = 0; i < man->hobbyCount; i++) {
cout << man->hobby[i]<<" ";
}
cout << endl;
cout << "=====================" << endl;
}
int main(void) {
const char* hobby[]={ "唱歌","跳舞","打篮球","看电影","踢足球" };
Man* ZhangSan;
Man* LiSi;
Man* WangWu;
ZhangSan = Man_New(5);
LiSi = Man_New(3);
WangWu = Man_New(2);
Man_Init(ZhangSan, "张三", 20, hobby);
Man_Init(LiSi, "李四", 24, hobby);
Man_Init(WangWu, "王五",26, hobby);
Man_Show(ZhangSan);
Man_Show(LiSi);
Man_Show(WangWu);
return 0;
}
柔性数组,(我觉得也可将之称呼为弹性数组),他的主要原理是你不知道存贮元素的具体大小时,可通过对其的动态分配实现资源的合理利用,不会使内存出现过多的的问题。