c指针小记

指针表达式

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. 数组指针指向第一个元素前面的位置是非法的,但是指向会后一个元素后面的一个位置是合法的。

指针的错误使用

  1. 对一个未初始化的指针进行解引用
  2. 对一个NULL指针进行解引用
  3. 向函数传递NULL指针
  4. 指针越界而未检测到,造成不可预料的错误
  5. 对一个数组进行减法运算,非法的指向了数组第一个元素前面的内存位置
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值