如果我有这个代码,例如:
int num = 5;
int *ptr = #
以下两个函数有什么区别?:
void func(int **foo);
void func(int *foo);
第一个想要一个指向 int 的指针,第二个想要一个直接指向 int 的指针。
我在哪里调用函数:
func(&ptr);
Asptr
是指向 int 的指针,&ptr
是地址,与int **
。
采用 a 的函数int *
会做一些与 不同的事情int **
。对话的结果将完全不同,导致未定义的行为,可能导致崩溃。
如果我传入 func(&ptr) 我实际上是在传入一个指针。指针指向另一个指针有什么区别?
+++++++++++++++++++
adr1 (ptr): + adr2 +
+++++++++++++++++++
+++++++++++++++++++
adr2 (num): + 42 +
+++++++++++++++++++
在 处adr2
,我们有一个 int 值,42。
在adr1
,我们有地址adr2
,具有指针的大小。
&ptr
给我们 adr1, ptr
, 拥有&num
,即 adr2。
如果我adr1
用作int *
,adr2
将被误认为是一个整数,从而导致一个(可能非常大的)数字。
如果我adr2
用作int **
,第一次取消引用会导致 42,这将被误解为地址并可能导致程序崩溃。
int *
和之间的区别不仅仅是光学int **
。
我相信后者会给出不兼容警告,
……有什么意思……
但似乎只要你知道自己在做什么,细节并不重要。
你?
似乎为了可读性和理解前者是更好的选择(2星指针),但从逻辑的角度来看,有什么区别?
这取决于函数对指针的作用。