C语言中的双指针代码
所以,在课堂上,我们用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;
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的两个整数数组保留一个块
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++)。