Pointers 什么';ptr=&;我的代码是n和ptr=(int*)malloc(4)?

Pointers 什么';ptr=&;我的代码是n和ptr=(int*)malloc(4)?,pointers,malloc,Pointers,Malloc,考虑以下示例代码: #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

考虑以下示例代码:


        #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;
        }
而不是

    ptr = (int*)malloc(4);
它不能正常工作。

请澄清为什么一个有效而另一个无效,因为每次
ptr
都是一个指针,用于存储存储整数值的内存块地址。

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

具有
ptr=(int*)malloc(4)获取新分配内存的地址。假设这里的环境中
sizeof(int)==4
。 您只能通过指针访问它

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


如果您观察到一个差异,例如代码似乎与第二个版本兼容,但与第一个版本不兼容,那么解释是您运气好,或者运气不好,这取决于您希望如何以及何时注意错误的理念。

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

具有
ptr=(int*)malloc(4)获取新分配内存的地址。假设这里的环境中
sizeof(int)==4
。 您只能通过指针访问它

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

如果您观察到一个差异,例如代码似乎与第二个版本兼容,但与第一个版本不兼容,那么解释是您运气好,或者运气不好,这取决于您希望注意错误的方式和时间

    ptr = (int*)malloc(4);