C和指针学习笔记-第六章
1.不能简单地通过检查一个值的位来判断它的类型,类型是通过值的使用方法隐式地确定。
2.一个变量的值就是分配给这个变量的内存位置所存储的数值。
3.声明一个指针变量并不会自动分配任何内存。在指针间接访问之前,指针必须初始化,或者使它指向现有内存,或者给它动态分配内存。
4.在对指针进行间接访问操作之前,首先必须要检查指针是否为NULL,对NULL指针执行间接访问操作的后果因编译器而异。
5.偶尔需要使用指针常量,通过将一个整型强制转化为指针类型来创建它。
*(int *100) = 25; *&a = 25 /*等价于a= 25*/
6.指针加1将会指向下一个变量,与该变量中在内存中占几个字节大小无关。
7.指针的算术运算: 指针 +/- 整数标准中定义这种形式只适用于指向数组中的某个元素的指针,但是,这种形式页适用于malloc函数动态分配的内存。如果一个指针减去一个整数之后,运算结果产生指针所指向的位置在数组第一个元素之前,那么它是非法的;如果指针加上一个整数之后,运算结果产生的指针指向数组最后一个元素,后面的那个内存位置(但是不对这个指针执行间接访问操作)是合法的,不过在往后就是不合法的了。
/*strlen函数实现*/ int my_strlen(char * string) { int len = 0; while(* string++ != '\0') { len ++; } return len; }
8.指针的算术运算: 指针 - 指针 标准定义这种形式只有当两个指针都指向同一个数组中的元素的情况下才适用。两个指针相减的结果表示两个指针在数组中相隔多少个元素。
9.指针的关系运算: < <= > >= 标准定义这几种形式只适用于两个指针都指向同一个数组。运算结果将会显示哪个指针靠前哪个指针靠后。然而任意两个指针都会执行判断相等或者不相等的操作。标准允许指向数组元素的指针与数组的最后一个元素后面的那个内存位置的指针进行比较,但是不允许与指向数组的第一个元素之前的那个内存位置的指针进行比较。