我目前正在尝试理解C中的指针,但我很难理解这段代码:
int a[10];
int *p = a+9;
while ( p > a )
*p-- = (int)(p-a);我在一定程度上理解了密码。我可以看到创建了一个包含10个整数元素的数组,然后声明了一个指向int类型的指针变量。(但我不明白a+9的意思:这会改变数组的值吗?)。
如果有人能一步一步地解释这一点,那将是很有帮助的,因为我对C中的指针还不熟悉。
发布于 2022-05-06 16:29:13
int a[10]; 这在例如堆栈上声明了一个数组。a表示数组的起始地址。声明告诉编译器a将包含10个整数。C假设你知道你在做什么,所以这取决于你将自己保持在这个范围内。
int *p = a+9;P被声明为指针,例如RL街道地址。向a添加偏移量时,偏移量将添加到地址a中。编译器将偏移量(如+5 )转换为字节( +5*sizeof(int) ),因此不需要考虑这一点,因此您的p指针现在指向数组内的偏移量9--这是数组a中的最后一个int,因为索引在C中从0开始。
while( p > a )条件是这样做,而p所指向的地址比a所在的地址要大。
*p-- = (int)(p-a);在这里,p所指向的值是用粗的(1)在指针p减少之前在当前p和启动地址a之间减去的。
(1)未定义的行为
https://stackoverflow.com/questions/72144417
复制相似问题