码
short **p = (short **)malloc(sizeof(short *));
*p = malloc(sizeof(short));
**p = 10;
printf("**p = %d", **p);
输出量
** p = 10
在此代码中,**p
声明了一个多指针,并且*p
不使用任何声明即可使用它(也许是by **p
)。
*p
对我来说是什么意思?对不起,很简单的问题。
我看到了C标准和堆栈溢出,但找不到任何东西。
对于任何数组,指针p
和索引i
,表达式p[i]
都等于*(p + i)
(其中*
一元解引用运算符,它在指针上的结果是指针所指向的值)。
因此,如果我们有p[0]
,则等于*(p + 0)
,等于*(p)
等于等于*p
。从那倒退*p
等于p[0]
。
所以
*p = malloc(sizeof(short));
等于
p[0] = malloc(sizeof(short));
和
**p = 10;
等于
p[0][0] = 10;
(**p
等于等于*(*(p + 0) + 0)
等于*(p[0] + 0)
然后等于p[0][0]
)
需要注意的是,星号*
在不同的上下文中可能意味着不同的含义。
可以在声明变量时使用它,然后表示“声明为指针”:
int *p; // Declare p as a pointer to an int value
它可用于取消引用指针,以获取指针指向的值:
*p = 0; // Equal to p[0] = 0
它可以用作乘法运算符:
r = a * b; // Multiply the values in a and b, store the resulting value in r
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句