摘要: 有了前面两篇的基础,下面正式开扒变量名和内存的关系,先看一段大家很熟悉的代码: int i; scanf_s("%d", &i); int i;,在这一句就为i分配了内存(但尚未对这块内存进行初始化),所以可以通过&i直接使用这块内存。赋值就更不用说啦,i = 3;。 变量名i,是为方便编程人员使用,是这块内存的别名,指代到块内存,对编程人员i代表这块内存中存储的值(实际上是i指到这个内存,然后取值)。通常我们都是通过变量名来使用已知的内存的。 i代表取(这块内存中存储的)值,而&i代表取(这块内存的)址。程序本身是不为i这个变量名分配空间的。在最终 阅读全文
posted @ 2013-04-08 21:48 czl-sy 阅读(2992) 评论(8) 推荐(4) 编辑
摘要: 注意:1. 引用成员变量 必须在构造函数的初始化列表中进行初始化2. 引用成员变量 并不为这个变量新辟空间;类对象做成员变量则是要对其新辟一段空间的。如下代码中,使用date1做参数初始化person_ref和person_obj。person_ref的birth字段date1为同一个地址空间,而p... 阅读全文
posted @ 2014-06-18 15:10 czl-sy 阅读(2755) 评论(0) 推荐(0) 编辑
摘要: 在代码调试过程中,还发现了一个比较诡异的事情,char*在使用malloc分配地址之后,如果对其使用字符串赋值,地址竟然会改变!!!逆天啊。 看下面的代码: char *pName = (char *)malloc(sizeof(char) * 100); pName = "se"; char *pName = (char *)malloc(sizeof(char) * 100)句为pName分配地址之后,再指向pName = "se",pName的地址会变化。注意指针的赋值,是将指针指向一个新的地址,那么也就是将指针pName指向了"se&q 阅读全文
posted @ 2013-04-09 21:25 czl-sy 阅读(3796) 评论(18) 推荐(1) 编辑
摘要: 在使用scanf时很需要注意一点就是取地址运算符&,这个运算符不留神就很容易忘记,将会产生是一个针对内存的冲突,错误不易查找并且严重,见下面的代码: int i = 2; scanf_s("%d", i); 上面的代码不小心失掉了&运算符[s1],会发生下面的冲突(之前已为i赋值2,所以是在位置0x00000002处访问冲突。而如果没有赋值,则是在0xcccccccc发生访问冲突) C中,因变量类型不同而导致编译器为变量分配内存空间的时机不同。在使用scanf时,要求提供变量的内存地址,且必须保证被赋值的空间是正确的空间,所以我们就可以利用这一点来讨论变量类 阅读全文
posted @ 2013-04-07 21:26 czl-sy 阅读(980) 评论(0) 推荐(0) 编辑
摘要: scanf和回车的关系: 先看一个我们经常使用的代码: char c; scanf("%c", &c); scanf 的各种格式中,%d、%c、%s三种最常用,通常都是以回车作为一次输入的结束。由于对字符解析方式及字符特点不同(如数字中一般不会出现空格回车等特殊字符)不同,%d格式一般不会在连续输入时,遇到问题。而%s和%c却会出现各种各样的问题,比如回车问题,空格问题等。我们已经习惯了上面的代码,再看下面存在连续输入时的情况: int i; char c; scanf("%d", &i); scanf("%c", & 阅读全文
posted @ 2013-04-07 20:49 czl-sy 阅读(15073) 评论(0) 推荐(4) 编辑