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 as
num = 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)
。由于*handle
是ptr
,进入*(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中带有双指针的代码的主要内容,如果未能解决你的问题,请参考以下文章