C语言中与指针运算有关的内存
我目前正在读一本关于C指针的书,书中有一个例子让我感到困惑: 假设我们有:C语言中与指针运算有关的内存,c,pointers,math,heap-memory,C,Pointers,Math,Heap Memory,我目前正在读一本关于C指针的书,书中有一个例子让我感到困惑: 假设我们有:intarruofint[]={5,10,15} 我们设置:int*add\u of\u arr=arr\u of\u int 然后我知道“add_of_arr”变量包含以下地址:arr_of_int[0] 让我们假设“add\u of_arr”的地址是500 现在,如果我这样做:“add\u of_arr+=3;”,那么“add\u of_arr”的地址现在是512?这就是我从书中得到的,但是“add_of_arr”的地
intarruofint[]={5,10,15}代码>
我们设置:int*add\u of\u arr=arr\u of\u int代码>
然后我知道“add_of_arr
”变量包含以下地址:arr_of_int[0]代码>
让我们假设“add\u of_arr
”的地址是500
现在,如果我这样做:“add\u of_arr+=3;
”,那么“add\u of_arr”的地址现在是512?这就是我从书中得到的,但是“add_of_arr
”的地址不应该仍然是500,而add_of_arr持有的地址应该是512吗?我从这本书中得到的是,add_of_arr的地址正在改变。这使我困惑。我想这是个错误,但我不确定
谢谢 这是一个输入错误:arr的add\u中的address现在是512,但是addr的add\u的address没有改变。你混淆了两件事:指针是存储内存的变量
地址。作为一个变量,它在内存中也有自己的地址。正如你所说的,让这是500。
表达式add_of_arr=arr_of_int
因此复制
将int[0]的数组放入内存位置500。现在假设,arr\u of_int
位于
内存位置400。然后add_of_arr=arr_of_int
将400存储到内存位置500中。在add_of_arr+=3
之后,内存位置500处的指针包含412。然而,add\u of_arr
(通过&add\u of_arr
获得)的地址仍然是500,但其值(通过add\u of_arr
获得)已从400更改为412。您为什么关心地址的地址?是的,这是一个很好的定义,是的,在某些情况下,这甚至是有用的,但你还没有做到。特别是,你似乎在谈论int**add_of_add_of_arr=&add_或_arr
500。我不明白为什么“&add_of_arr”在变化而不是“add_of_arr”,但这看起来像是一个打字错误。完全按照所写的阅读我们的假设,你是对的,而这本书是错的。好样的!也许你应该找一本更好更精确的书。只是:int
不能保证有4个字节。它可以是1(!)中的任意大小。另外,如果addr
(使用更好的名称!)的地址是500
,那么数组的地址也不能是500
,因此递增后的值不能是512
(假设sizeof(int)=4U
)!看起来这本书的作者很困惑。OP是正确的!