在考C++的前一天晚上(一天的学习总结)

在今天开始之前,一直以为C++有什么鬼好复习的,然后看了下班群好像别人都在复习得很认真的样子。然后我就看了一下习题。挖槽,好多不会- -!现在开始:

一.指针数组和数组指针。

指针数组array of pointers,即用于存储指针的数组,也就是数组元素都是指针

定义char *p[10];

数组指针a pointer to an array,即指向数组的指针

定义char (*p)[10];

区别:比如说上面那2个,指针数组定义了就分配了10个指针的内存空间。数组指针定义了之分配一个内存的内存空间。

注意:那么这个东西有什么用呢?

比如如果有int array[3][4];

然后你定义一个int **pointer =a;编译器肯定是会报错的!

所以你要定义int (*pointer)[4]=a;就可以啦。

为什么会这样说起来就很复杂了,这里面涉及到指针怎么读所指对象的和对象在内存中的表示。(是吧吐舌头

二.转义字符

前面带  '\'  的字符。

八进制表示:\ddd 3位八进制表示字符ASCII码。

十六进制表示:\xhh x后面接2位十六进制来表示字符ASCII码。

三.strcpy函数

拷贝字符串,然后在字符串后面加'\0';

本来也被什么好说的,但是它的鬼考题居然这样出:

char str1[]="how are you";

char str2[11],*p;

strcpy(p=str2,str1);

这个选项是正确的,但是str2明明只分配了11个空间,最后一个'\0'字符无法加上去的啊!

最后经过种种分析,各种实验,我得出了一个结论:

所谓分配空间,就是char str[11];这种。应该是告诉内存,给我一个正常的地址,然后这个地址后的11个单位,如果不是程序员自己去改,里面的东西就不会变。strcmp函数可不知道这些,他就直接在str+11这个地址里面的值补0了。

但是,程序在变化的时候,内存里的东西是会一直变的,就是说,str+11的0非常有可能会被覆盖。

所以在自己编程的时候,千万不要犯这种错误!

四.共用体

这个鬼东西课堂上讲都没讲。(或许是我没听?)

就是所有成员共用一个地址,只有一个成员有效。共用体大小取决于最大成员的大小。

然后他粗题这样粗- -!

union a{int i,char ch;}

a.i=266;

问ch的值为多少?

然后我想了好久.......

266二进制表示为100001010 

整形数的表示在32位上计算机上4个字节,忽略前面若干个0。然后char 只有一个字节,一个字节8位。所以只是读后面那8位,得出来是00001010,转化为十进制也就是10。

答对了啦啦啦!

五.总结

学得还太少,很多内存方面的深入知识没有掌握,而指针是操作内存很好的手段,因此导致指针也学得不太好。指针学得不太好C就学不好了- -!




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值