gpt4 book ai didi

c - 我可以取消引用整数指针的地址吗?

转载 作者:太空宇宙 更新时间:2023-11-04 01:43:58 25 4
gpt4 key购买 nike

考虑到以下几点,我试图找出填写int指针k的所有可能方法:

int i = 40;    
int *p = &i;
int *k = ___;

到目前为止,我想到了“&I”和“p”。但是,是否可以用“*p”或“*p”填空呢?
我对“*&p”的理解是它正在取消对整数指针地址的引用。对我来说,这意味着如果打印出来就会输出p的内容,即&i,或者在初始化int指针时这是不可能的?或是任何时候都有可能?
我理解“&*p”,因为整数*p的内存地址指向。这个我也很不确定。
如果有人有任何建议或建议,我将非常感谢!真的想更好地理解指针。

最佳答案

指针基础知识
指针只是一个普通变量,它将其他对象的地址作为其值。换句话说,指针指向可以找到其他内容的地址。当你通常认为一个变量包含一个即时值,比如int i = 40;,一个指针(比如int *p = &i;)会简单地保存40存储在内存中的地址。
如果需要存储在内存地址p指向的值,则使用一元p运算符取消引用'*',例如int j = *p;将初始化j = 40
由于p指向存储40的地址,如果您在该地址更改该值(例如*p = 41;41现在存储在以前40的地址。因为p指向i的地址,并且您已经更改了该地址的值,i现在等于41。但是j位于另一个内存位置,其值是在您更改i地址处的值之前设置的,j的值仍为40
如果要创建第二个指针(例如int *k;),则只需创建另一个变量,该变量将地址作为其值。如果您希望k引用p持有的同一地址作为其值,您只需初始化k,就像在声明时通过分配其值初始化任何其他变量一样,例如int *k = p;(这与在初始化后的某个点分配k = p;相同)。
指针算术
指针算法的工作方式与此相同,而不考虑指向的对象类型,因为指针的type控制指针算法,例如使用char *指针,pointer+1指向下一个字节(nextchar),对于int *指针(正常的4字节整数),pointer+1将指向int之后偏移4字节处的下一个pointer。(所以一个指针,只是一个指针。。。。其中,算法由type自动处理)
把和*连在一起
可用于获取对象地址和解引用指针的运算符是一元'&'(address of)运算符和一元'*'(解引用)运算符。'&'获取一个对象的地址会增加一级间接寻址。'*'在取消指针的顺序以获取指针指向的值(或对象)时,会删除一个级别的间接寻址。因此,正如@KamilCuk在他的评论中举例说明的那样,一个接一个地应用多少次并不重要,一个简单地添加,另一个删除一定程度的间接操作,使得除了最后一个操作符之外的所有操作都是多余的。
(注意:在处理指针数组时,用于在数组索引处获取指针的postfix[..]运算符也会取消指针数组的顺序,从而删除一级间接寻址)
你的选择
鉴于你的声明:

int i = 40;    
int *p = &i;
int *k = ___;

上面的指针摘要,有两个选项,都是等价的。您可以直接用 k地址初始化指针 i,例如。
int *k = &i;

或者您可以通过分配 k持有的地址来初始化 p,例如。
int *k = p;

不管怎样, k现在都将当前存储 i40的内存位置作为其值。

关于c - 我可以取消引用整数指针的地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57451436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com