C语言指针练习讲解:指针理解

题:求p[0]--p[5]的值(小端)
 #include <stdio.h>
 int main(void)
 { 
    char* data = "12345678";
    short* tmp = NULL; 
    char p[6] = {0};
  
    tmp = (short *)&p[2];
    *tmp = atoi(&data[4]); //"5678"==>5678===>0x162e
     
    //p[0] = ?, p[1] = ?, p[2] = ?,    
    //p[3] = ?, p[4] = ?, p[5] = ?。      
    //结果用16进制表示
    // 0x0,0x0,0x2e,0x16,0x0,0x0
    return 0;
 }

atoi(ASCII to Integer)函数是 C 语言标准库中原型int atoi(const char* str);的一个函数,用于将字符串转换为对应的整数值,遇到“\n”符号结束转换,也就是将字符串“5678”转换为对应的整数值5678,其十六进制是0x162e;

  • &data[4] 取得字符串中索引为 4 的字符 '5' 的地址,即字符串 "5678" 的起始地址。
  • 每个字符串的结尾都隐含一个结尾符号“\n”。
  • 题外话:数组和字符串的传参往往是“首地址”代表整体。

要注意指针有一个特点,与普通赋值等号右边不修改的特性不同,对等号右边的指针操作会同时修改相关联(等号左边)的指针变量,也就是 tmp = (short *)&p[2]; 中,对指针操作会影响数组P的值。

    tmp = (short *)&p[2]; //short类型的tmp指向 p[2] 的地址;-------地址操作
    *tmp = atoi(&data[4]); //将整数 5678 (0x162e)存储在 tmp 指针指向的地址;-------存储值操作

根据小端字节序(Little Endian),内存中低地址存储低位字节,高地址存储高位字节。

数组元素地址从低到高排序,十六进制中0x162e,0x2e才是低字节,

所以p[2] =0x2e; p[3] =0x16;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值