找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1137|回复: 9
打印 上一主题 下一主题
收起左侧

关于C51单片机编程中地址覆盖的请教

[复制链接]
跳转到指定楼层
楼主
ID:607146 发表于 2019-9-9 22:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我一一段代码如下

unsigned char *p;  //声明一个指针变量
p="123";    //赋值123给这个指针上,假定地址为0x09CE,此时0x09CE被赋值了0x31,0x09CF为0x32
*p='9';      //我想把 0x09CE覆盖为0x39
此时查看0x09CE还是0x31,并没有被覆盖,这是怎么回事。如果这种方式是错的我应该怎么覆盖这个地址上的值。谢谢

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:478885 发表于 2019-9-10 07:56 | 只看该作者

*p='9';  改为*p=39;0x09CE被覆盖为0x39了
回复

使用道具 举报

板凳
ID:94031 发表于 2019-9-10 08:32 | 只看该作者
既然用c语言就不要纠结具体物理地址,如果对物理地址很在乎就用汇编好了,典型由汇编初转c者心态。。
回复

使用道具 举报

地板
ID:607146 发表于 2019-9-10 09:27 | 只看该作者
swzh 发表于 2019-9-10 07:56
*p='9';  改为*p=39;0x09CE被覆盖为0x39了

试过了用*p=0x39也是不行的
回复

使用道具 举报

5#
ID:607146 发表于 2019-9-10 09:33 | 只看该作者
xuyaqi 发表于 2019-9-10 08:32
既然用c语言就不要纠结具体物理地址,如果对物理地址很在乎就用汇编好了,典型由汇编初转c者心态。。

刚开始学C51,是因为使用system.h的strcat函数拼接字符串,发现不能拼接。看了strcat实现方式

char* Strcat(char *dst, const char *src)
{
        assert(dst != NULL && src != NULL);
        char *temp = dst;
        while (*temp != '\0')
                temp++;
        while ((*temp++ = *src++) != '\0');

        return dst;
}

发现*temp++ = *src++这个执行了但并没有真正的把*src赋值给*temp。所以才有的这个疑问。
回复

使用道具 举报

6#
ID:123289 发表于 2019-9-10 11:51 | 只看该作者
0x09CE是RAM地址还是程序地址呢?
回复

使用道具 举报

7#
ID:15020 发表于 2019-9-10 13:09 | 只看该作者
unsigned char *p;  //声明一个指针变量
p="123";    //这句改的是p指向的地址
*p='9';      //这句改的是p所指地址的数据
两句作用是不一样的,p前的*号很重要
回复

使用道具 举报

8#
ID:607146 发表于 2019-9-10 14:17 | 只看该作者
yzwzfyz 发表于 2019-9-10 11:51
0x09CE是RAM地址还是程序地址呢?

RAM地址
回复

使用道具 举报

9#
ID:607146 发表于 2019-9-10 14:18 | 只看该作者
yutian_51hei 发表于 2019-9-10 13:09
unsigned char *p;  //声明一个指针变量
p="123";    //这句改的是p指向的地址
*p='9';      //这句改的 ...

你好,我想实现先对地址赋一个值然后再用另一个值覆盖的话应该怎么写呢?
回复

使用道具 举报

10#
ID:610106 发表于 2019-9-10 17:04 | 只看该作者
此时p指向的是只读数据吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表