微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我的代码的 ptr=&n 和 ptr = (int*)malloc(4) 之间有什么区别?

如何解决我的代码的 ptr=&n 和 ptr = (int*)malloc(4) 之间有什么区别?

考虑这个示例代码


        #include <stdio.h>
        #include <stdlib.h>

        int main(void){
        int i=0,n;
        int*ptr;                  /*this program attempts to prompt user to keep entering integer 
                                values untill he gives 9 as input */
        //ptr=&n;
        ptr = (int*)malloc(4);
        for(i=0;;i++)
        {
           scanf("%d",ptr+i);
           if(*(ptr+i)==9)
           return 0;
        }
        return 0;
        }

上面的代码通过提示用户一直输入整数直到他输入 9 ,效果很好。
但是如果我写

    ptr=&n;

代替

    ptr = (int*)malloc(4);

它不能正常工作。
请说明为什么一个有效而另一个无效,因为每次 ptr 都是一个指针,用于存储存储整数值的内存块的地址。

解决方法

使用 ptr=&n; 获取现有变量的地址。
您可以直接访问该变量,也可以通过指针访问它。

使用 ptr = (int*)malloc(4); 获取新分配的内存片的地址。假设 sizeof(int)==4 在您的环境中。 您只能通过指针访问它。

在这两种情况下,您的循环从第二次交互(当 >0 时)访问您不允许访问的内存。

如果您观察到差异,例如代码似乎适用于第二个版本,但不适用于第一个版本,那么解释是您是幸运还是不幸,这取决于您想要注意错误的方式和时间的哲学。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。