C中带有双指针的代码

Posted

技术标签:

【中文标题】C中带有双指针的代码【英文标题】:Code with double pointer in C 【发布时间】:2014-03-22 09:28:51 【问题描述】:

所以,在课堂上我们得到了这个 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的地址的值赋值给handle(意思是handle指向ptr?)

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

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

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

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

谢谢!

【问题讨论】:

告诉你讲座应该是ptr = malloc(2 * sizeof(int)); @EdHeal 它需要一个演员 @Rob; 需要演员表:不,不需要 他们是否更改了标准以允许将 void * 分配给 int *? @Rob,它不需要演员表。没有演员表你有什么警告吗?不。如果您确实收到警告,那是因为您忘记包含 stdlib(或者您正在使用 C++)。 【参考方案1】:

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

【讨论】:

【参考方案2】:

“4. ...表示句柄指向ptr?”

是的!好的。

"5. 然后 **handle = num; 让我感到困惑,但我将其解释为:句柄指向的指针(即 ptr)现在指向 num"

不正确:这里将num 的值赋值给(即:num 被复制到)handle 指向的位置所指向的位置handle 指向的位置是ptr 每上一行,所以num 被复制到ptr 指向的位置,即第一个分配有malloc() 的两个位置中的一个。

"6. ... 现在将指向 num+1"

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

"7.Then *ptr = num-2; 我假设这会影响变量 num 本身,工作 asnum = num - 2;` 并因此将其值更改为 12。所以,在这一点上,我们有ptr 指向由 14 和 15 组成的数组,num 的值为 12。

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

仅在下一行 (ptr = #) 将ptr 的值更改为num 的地址并对*ptr 进行操作,ptr 指向的对象 ,现在将影响num

【讨论】:

【参考方案3】:

5.然后 **handle = num;让我感到困惑,但我将其解释为:句柄指向的指针(即 ptr)现在指向 num (14)。问题:如果这是正确的,那么这个操作的效果是什么,给ptr分配了一个数组的内存空间?

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

【讨论】:

以上是关于C中带有双指针的代码的主要内容,如果未能解决你的问题,请参考以下文章

Impala Shell 查询 -q 在字符串中带有双引号

如何将字符串中带有双引号的json文件加载到spark scala中的数据框中

c中带有无符号字符的空指针

c_cpp C中带有读指针的动态缓冲区示例

C函数中双指针和单指针有啥区别

如何为数组分配双指针? C/C++