lvalue 类型的值可以作为左值 说白了就是变量
rvalue 类型的值不可以作为左值也就是常量了
const 在一个变量前边出现只是为了说明这个变量是一个常量(这就话听起来挺别扭:既然是变量了为什么还是常量?你可以这样理解:因为我先声明一个变量→接着给他赋值→然后我再用const来修饰他 。也可以说他是从变量转换过来的!)
当一个变量用const修饰时 编译器就会在编译时检查是否存在试图修改该变量的语句/如果存在就报错
自动变量 在一个大括号里声明的、同时也说明了他的作用域只在这括号里;
自动变量所占得空间在一个称为栈的内存区域中自动分配、栈是专门为此留下的内存。栈的的默认大小为1M。
在所有代码块和类之外声明的变量成为 全局变量
逻辑 &&:与
逻辑 || :或
字符数组:每个字符占一个字节/但是最后的结束符要记得算上!它也占一个字节!
char ArrCha[]; 这样的字符数组没有指明长度所以第一次可以随便的赋值任意长度字符 。如果想用另外一个字符串覆盖第一次的字符串就要注意第二次的字符串长度不能超过第一次的长度!
指针 :出来第一次声明指针时、指针变量前可以有星号、在其他地方以指针变量来使用时都不添加星号
:但是当使用取值符号时一样可以出现星号、其意义已经不是声明指针、而是取出指针变量中的值
:指针的取址符号:&
:指针的取值符号:* 值得区分下!
long *pStr=NULL;
int nSet=100;
pStr=&nSet;
*pStr+=100;
这个列子中的最后以步、如果不添加星号、就会变成在该指针内存位置偏移100/这个很重要!
常量指针:不能被修改的指针(可以简单的这样理解)
指向常量的指针:意思是一个指针它所指向的是一个常量(const修饰的变量)、指针本身不是常量(没有别const修饰)
三种情况:
指向常量对象的指针。
const char* str="aaa";
指向某个对象的常量指针。
char * const str="bbb";
指向常量对象的常量指针。
const char * const str="ccc";
第一种情况:我们不可以修改被指向的对象,但是可以修改指针所指的方向(也就是可以指向别的对象)___就好比钟表、箭头可以动、但是刻度是不会动的
第二种情况:我们不能修改指针的所指的方向,但是可以修改指针所指对象的内容___________就好比抽奖的转盘、指针是不能动的、转盘上的标示可以来回的转而
第三种情况:我们既不可以修改指针所指的方向,也不可以修改指针所指对象的内容__________反正是谁也不能动
说到这里有一个值得注意的地方:就是字符串字面值的类型是const char数组 (所以使用非const指针试图修改时将报错更甚至导致程序崩掉)
指针的算术运算范围:指针算术运算产生的地址范围在一个元素的地址到最后一个元素地址的、如果超过这个范围、指针的行为将不确定;
数组: