C++指针一个鲜见知识点

好吧,最近去应聘,对方给了一份题目,我表示这个题目也太偏硬件了,好多东西都没见过,或者说笔者没听过讲。当然学无止境,既然有自己不知道的知识点,那就要搞懂,现在我就来归纳一下吧,希望能给那些自学的或者学校里讲解没有偏硬件的IT人一些经验吧。

首先是:人家给了一个编程题:写一个内存拷贝函数,一开始我心想挺简单的啊.结果在往下看才知道坑爹,人家给出了函数原型:

void * MemCopy(void *dst,const void *src,size_t count);看到这个我彻底晕了,前面2个参数面前也就知道是2个指针,可是void类型,我记得Void是空的意思,然后空的指针能用?接着就是size_t,心想当初就算我完全没听讲,可是课本翻了那么多次,怎么就没看见过这个东西?这是什么类型的变量。后来翻书,结果学校里的教程还真没有这个东西。不过课本上还真有void *这种指针:void是表示空的意思,但是当void *就表示指针类型是未知的更准确的说是通用指针,也就是说:当你用这个表示一个指针变量时就是告诉编译器:我定义的这个指针,我目前不知道是什么类型的指针,编译器就会小心。这样,我们就可以将任意类型的指针都可以复制给这种指针。我们在从题目来看一下:拷贝内存,我们无法知道内存的东西是什么,当你拷贝内存的时候,如果你针对每一种类型的变量都变写一次函数的话。后果...。现在我们用void *指针的话,就是不管什么样的形参都可以代入进去。

但是怎么使用?我给一个最简单的例子

	int a= 445;
	char b[]="Hello";
	void *p;
	p = &a;
	cout<<p<<endl;//可以输出的是物理地址
	//cout<<*p<<endl;不能这样输出
	cout<<*(int *)p<<endl;//输出的是445
	p = b;
	cout<<(char *)p<<endl;//输出的是Hello
	cout<<*(char *)p<<endl;//这个是H,知道为什么吗?上一个(char *)p是指针,*(char *)p是值,提示一下,它们的差异是因为C++的输出流机制  


因为这篇文章主要是自己的笔记所以后面这点代码是给自己看的,嘿嘿

char p2[] = "hello";
	void *p1;
	p1= &p2;
//它和下面是等价的
       void *p1=p2;


 

至于什么是size_t,我查了一下,是C标准库里面的一种跨平台的变量类型,和Int很像,但是因为C/C++标准对int定义一最低的位数,而不是必需的固定位数。而且在内存里,对数的高位对齐存储还是低位对齐存储各系统都不一样。为了提高代码的可移植性,就有必要定义这样的类型变量。当然我这size_t也是找百度的,现在还是一头雾水,详情读者朋友可以自己找相关资料。

当然如果你关心这到题目怎么写的可以看看大神学的:http://blog.sina.com.cn/s/blog_78756e4901014yw5.html这个文章算是不错的,每一步都很详细。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值