指针表达式
int ch = 100;
int *cp = &ch;
printf("cp = %d", *cp)
程序会返回ch的值。
char ch = 'a';
char *cp = &ch;
printf("cp = %s", *cp)
此处代码非法,表达式&ch求值时,它会存储于某个地方,但你无从得知,它的存储位置没有明晰的界定,所以它不是一个合法的左值。
char ch = 'a';
char *cp = &ch;
++*cp;#非法, 从右向左结合性
(*cp)++;#正确, cp所指向的值加一
++*++cp;#cp指向位置加1再取里面的值之后在加1
先执行间接访问操作,在执行++操作
cp地址加1后取出其中的值,对值在进行加1操作
++操作符在指针中要加入括号
指针运算
1.一个指针和一个整数进行算术运算,整数在执行加法运算前会根据“合适的
大小”进行调整,就是把整数值和指针所指类型大小相乘。
举个例子,
char型 p+2
p的大小为1 p+2加到指针的值为2
2.指针算术运算的两种习形式:
指针 ± 整数
指针 - 指针 其为有符号整型:ptrdiff_t类型,结果是以数组元素的长度为单位。仅在两个指针指向同一数组时候合法。
3. 数组指针指向第一个元素前面的位置是非法的,但是指向会后一个元素后面的一个位置是合法的。
指针的错误使用
- 对一个未初始化的指针进行解引用
- 对一个NULL指针进行解引用
- 向函数传递NULL指针
- 指针越界而未检测到,造成不可预料的错误
- 对一个数组进行减法运算,非法的指向了数组第一个元素前面的内存位置