C++指针一个鲜见知识点
来源:互联网 发布:最好用的网络机顶盒 编辑:程序博客网 时间:2024/06/07 08:28
好吧,最近去应聘,对方给了一份题目,我表示这个题目也太偏硬件了,好多东西都没见过,或者说笔者没听过讲。当然学无止境,既然有自己不知道的知识点,那就要搞懂,现在我就来归纳一下吧,希望能给那些自学的或者学校里讲解没有偏硬件的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;//输出的是445p = b;cout<<(char *)p<<endl;//输出的是Hellocout<<*(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这个文章算是不错的,每一步都很详细。
- C++指针一个鲜见知识点
- [C++]指针知识点小结
- C 指针 基础知识点
- C语言指针知识点
- C语言指针相关知识点
- C/C++指针知识点汇总
- 指向字符串指针的一个知识点
- C语言指针小知识点记录
- C语言指针与数组知识点
- 指针知识点
- 指针知识点
- 一个C语言中的小知识点
- C语言之知识点总结——const指针
- 从头认识C—指针的一些知识点
- 程序员——C语言之指针 易错知识点
- C语言指针与数组易混淆知识点(一)
- C语言小知识点 汇总5 结构体指针
- <C语言>数组与指针详细知识点(全)
- KMP算法 字符串匹配
- 字典树
- 第1次实验
- DP堆积木的最大高度
- C++ string中find() ,rfind() 等函数 用法总结及示例
- C++指针一个鲜见知识点
- rqnoj-356-mty的格斗-二维背包
- SWT table 设置行,列背景色,字体色
- Java一道笔试题 equals
- 银行管理系统
- VMware虚拟机磁盘压缩
- 【设计模式】Builder模式
- iOS ARC中CTCallCenter没用,无法监听电话的解决方案
- linux下"base64"命令工具的使用