标题: 关于C51单片机编程中地址覆盖的请教 [打印本页]

作者: 七夕宝宝    时间: 2019-9-9 22:51
标题: 关于C51单片机编程中地址覆盖的请教
我一一段代码如下

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


作者: swzh    时间: 2019-9-10 07:56

*p='9';  改为*p=39;0x09CE被覆盖为0x39了
作者: xuyaqi    时间: 2019-9-10 08:32
既然用c语言就不要纠结具体物理地址,如果对物理地址很在乎就用汇编好了,典型由汇编初转c者心态。。
作者: 七夕宝宝    时间: 2019-9-10 09:27
swzh 发表于 2019-9-10 07:56
*p='9';  改为*p=39;0x09CE被覆盖为0x39了

试过了用*p=0x39也是不行的
作者: 七夕宝宝    时间: 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。所以才有的这个疑问。
作者: yzwzfyz    时间: 2019-9-10 11:51
0x09CE是RAM地址还是程序地址呢?
作者: yutian_51hei    时间: 2019-9-10 13:09
unsigned char *p;  //声明一个指针变量
p="123";    //这句改的是p指向的地址
*p='9';      //这句改的是p所指地址的数据
两句作用是不一样的,p前的*号很重要
作者: 七夕宝宝    时间: 2019-9-10 14:17
yzwzfyz 发表于 2019-9-10 11:51
0x09CE是RAM地址还是程序地址呢?

RAM地址
作者: 七夕宝宝    时间: 2019-9-10 14:18
yutian_51hei 发表于 2019-9-10 13:09
unsigned char *p;  //声明一个指针变量
p="123";    //这句改的是p指向的地址
*p='9';      //这句改的 ...

你好,我想实现先对地址赋一个值然后再用另一个值覆盖的话应该怎么写呢?
作者: trulydream    时间: 2019-9-10 17:04
此时p指向的是只读数据吧




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1