C中带双指针的代码

时间:2014-03-22 09:28:52

标签: 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;                     
    *(*handle+1) = num+1;                   
    *ptr = num-2;                           
    ptr = #                         
    *ptr = soma_ds(num-2)

我从中理解的是:

1.一个整数,一个指针和一个双指针被声明

  1. num = 14;将值14分配给num

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

  3. 4.然后handle = &ptr;分配要处理的ptr地址的值(意味着处理指向ptr?)

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

    6.之后,我很确定我的错误。所以行*(*handle+1) = num+1意味着,因为句柄的地址为ptr,* handle + 1(* handle是ptr,因此* handle + 1将是num的内存地址的增量)现在将指向num +1(14 + 1 = 15)。 问题:如果这是正确的,那是否意味着保留给ptr的数组现在由行上的整数14和15组成?

    7.然后*ptr = num-2;´; I assumed that would affect the variable num itself, working as num = num - 2;`并因此将其值更改为12.因此,此时,我们将ptr指向由14和15组成的数组,并且num具有价值12。

    问题:我一定是在想错,因为我无法理解下一个命令ptr = #的作用。是否有人能够解释它/提供一个链接或一个可以帮助我理解它的例子?

    谢谢!

3 个答案:

答案 0 :(得分:1)

ptr将成为num的地址,即存储14的地址

答案 1 :(得分:0)

5.然后** handle = num;困惑我,但我把它解释为:句柄指向的指针(即ptr)现在指向num(14)。问题:如果这是正确的,那么在为ptr分配数组的内存空间的情况下,这个操作会产生什么影响呢?

The above statement means you can access the num value using **handle

答案 2 :(得分:0)

  

“4 ....意思是处理指向ptr?”

是的!确定。

  

“5。然后** handle = num;混淆了我,但我把它解释为:句柄所指向的指针(也就是ptr)现在指向num”

不正确:此处有num的值分配(即:num被复制到)handle指向的位置指向的位置< / em>的。 handle 指向的位置是前一行ptr,因此num被复制到ptr <指向的位置/ em>,这是分配有malloc()的两个位置中的第一个。

  

“6 ......现在指向num + 1”

结论是正确的,但您并非指向num+1 。您已将num+1分配/复制到*(*handle+1)。由于*handleptr,因此*(ptr+1)或者您更喜欢效果与ptr[1]=num+1相同 - 其中ptr仍然指向分配了{的内存{1}}。

  

“7.然后* ptr = num-2;我认为这会影响变量num本身,工作asnum = num - 2;`因此将其值更改为12.所以,此时,我们已经ptr指向由14和15组成的数组,num表示值为12。

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

仅在下一行(malloc()),您将ptr = &num;的值更改为ptr的地址以及num上的操作,指向的对象*ptr ,现在将影响ptr