C专家编程》笔记三:第四章 数组和指针并不相同

一。数组与指针的访问方式

char *p=“abcdef”; --------------p[3]:

编译器符号表中有一个指针p,p的地址为4624,4624不是字符串的首地址

                 运行时步骤1:取地址4624的内容“5081”

                 运行时步骤2:取i的值,再加上5081

                 运行时步骤3:取地址【5081+i】的内容‘d’

char a[ ]="abcdef";--------------a[3]

编译器符号表中有a的对应地址9980,即数组首地址

                 运行时步骤1:取i的值,再加上9980

                运行时步骤2:取地址【9980+1】的内容‘d’

总结:数组取值比指针取值少一次内存访问

如果p被声明为指针p[i]就进行 操作*(*p+i)----------不论p本身是数组还是指针,如果p本身是数组那操作就变成了 取数组第一个字符当地址加上i 当地址取值,结果就不正确了

如果p声明为数组p[ i ] 就进行操作 *(p+i)

二。编译器并不为指针所指向的对象分配空间,只分配指针本身的空间,除非在定义时同时赋给指针一个字符串常量进行初始化(其他类型都不可以)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值