万能指针与柔性数组

万能指针

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;
}

 柔性数组,(我觉得也可将之称呼为弹性数组),他的主要原理是你不知道存贮元素的具体大小时,可通过对其的动态分配实现资源的合理利用,不会使内存出现过多的的问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

love_meng1114

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值