所以,在课堂上我们用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分配数组的内存空间的情况下,这个操作会产生什么影响呢?
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 = #
的作用。是否有人能够解释它/提供一个链接或一个可以帮助我理解它的例子?
谢谢!
答案 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)
。由于*handle
为ptr
,因此*(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 = #
的值更改为ptr
的地址以及num
上的操作,指向的对象*ptr
,现在将影响ptr
。