C语言中的双指针代码

C语言中的双指针代码,c,arrays,pointers,double,C,Arrays,Pointers,Double,所以,在课堂上,我们用C语言编写了这个程序: int main() { int num; int *ptr; int **handle; num = 14; ptr = (int *)malloc(2 * sizeof(int)); handle = &ptr; **handle = num;

所以,在课堂上,我们用C语言编写了这个程序:

int main() {
    int num;                                
    int *ptr; 
    int **handle;

    num = 14;                           
    ptr = (int *)malloc(2 * sizeof(int));   
    handle = &ptr;

    **handle = num;                     
    *(*handle+1) = num+1;                   
    *ptr = num-2;                           
    ptr = #                         
    *ptr = soma_ds(num-2)
我从中了解到:

1.声明整数、指针和双指针

  • num=14将值14赋值为num

  • ptr=(int*)malloc(2*sizeof(int))在内存中为分配给ptr的两个整数数组保留一个块

  • 4.然后
    handle=&ptr将ptr地址的值分配给句柄(意味着句柄指向ptr?)

    5.然后
    **handle=num
    让我困惑,但我将其解释为:句柄所指向的指针(即ptr)现在指向num(14)问题:如果这是正确的,那么在为ptr分配了阵列的内存空间的情况下,此操作会产生什么影响

    The above statement means you can access the num value using **handle
    
    (英译汉)在这之后,我确信我完全弄错了。因此,
    *(*handle+1)=num+1
    行意味着,由于handle的地址是ptr,所以*handle+1(*handle是ptr,因此*handle+1是num的内存地址的增量)现在将指向num+1(14+1=15)问题:如果这是正确的,是否意味着保留给ptr的数组现在由一行上的整数14和15组成

    7.然后
    *ptr=num-2;´; 我假设这会影响变量num本身,就像
    num=num-2;`因此将其值更改为12。因此,在这一点上,我们将ptr指向由14和15组成的数组,num的值为12

    问题:我一定是想错了,因为我不明白下一个命令是什么,
    ptr=&num,确实如此。有人能解释一下/提供一个链接或一个例子来帮助我理解它吗


    谢谢大家!

    ptr
    将成为
    num
    的地址,即存储14的位置,然后**handle=num;我很困惑,但我将其解释为:句柄所指向的指针(即ptr)现在指向num(14)。问题:如果这是正确的,那么在为ptr分配阵列内存空间的情况下,此操作会产生什么影响

    The above statement means you can access the num value using **handle
    
    “4…意味着句柄指向ptr?”

    对!!嗯

    “5.然后**handle=num;使我困惑,但我将其解释为:handle指向的指针(即ptr)现在指向num”

    不正确:此处将
    num
    的值赋值给(即:
    num
    被复制到)由
    句柄所指向的位置所指向的位置。根据前一行,
    handle
    指向的位置是
    ptr
    ,因此
    num
    被复制到
    ptr
    指向的位置,即分配给
    malloc()
    的两个位置中的第一个

    “6…现在将指向num+1”

    结论是正确的,但您没有指向
    num+1
    。您已将
    num+1
    分配/复制到
    *(*handle+1)
    。由于
    *handle
    ptr
    ,因此进入
    *(ptr+1)
    ,或者如果您愿意,效果与
    ptr[1]=num+1
    相同,其中
    ptr
    仍然指向使用
    malloc()分配的内存

    “7.然后*ptr=num-2;我假设这会影响变量num本身,以num=num-2的形式工作,`因此将其值更改为12。因此,此时,ptr将指向由14和15组成的数组,num的值为12

    不:将“*”读作“指向的对象”-这是一个很好的助记符。因此,您仍然在更改
    ptr
    指向的对象,即
    ptr[0]=num-2
    ,您再次更改分配给
    malloc()的两个整数位置中的第一个


    只有在下一行(
    ptr=#
    )中,您将
    ptr
    的值更改为
    num
    的地址,并且对
    *ptr
    的操作,
    ptr
    指向的对象将影响
    num

    告诉您应该是
    ptr=malloc(2*sizeof(int));
    @EdHeal它需要一个cast@Rob;它需要一个强制类型:不。没有。他们是否更改了标准,允许将void*分配给int*?@Rob,它不需要强制类型。没有强制类型的情况下你有任何警告吗?没有。如果你有警告,那是因为你忘了包含stdlib(或者你正在使用C++)。