首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >int a[10]的意义;int *p = a+9;

int a[10]的意义;int *p = a+9;
EN

Stack Overflow用户
提问于 2022-05-06 16:02:05
回答 1查看 124关注 0票数 0

我目前正在尝试理解C中的指针,但我很难理解这段代码:

代码语言:javascript
复制
int a[10]; 
int *p = a+9;
while ( p > a )
    *p-- = (int)(p-a);

我在一定程度上理解了密码。我可以看到创建了一个包含10个整数元素的数组,然后声明了一个指向int类型的指针变量。(但我不明白a+9的意思:这会改变数组的值吗?)。

如果有人能一步一步地解释这一点,那将是很有帮助的,因为我对C中的指针还不熟悉。

EN

回答 1

Stack Overflow用户

发布于 2022-05-06 16:29:13

代码语言:javascript
复制
int a[10]; 

这在例如堆栈上声明了一个数组。a表示数组的起始地址。声明告诉编译器a将包含10个整数。C假设你知道你在做什么,所以这取决于你将自己保持在这个范围内。

代码语言:javascript
复制
int *p = a+9;

P被声明为指针,例如RL街道地址。向a添加偏移量时,偏移量将添加到地址a中。编译器将偏移量(如+5 )转换为字节( +5*sizeof(int) ),因此不需要考虑这一点,因此您的p指针现在指向数组内的偏移量9--这是数组a中的最后一个int,因为索引在C中从0开始。

代码语言:javascript
复制
while( p > a )

条件是这样做,而p所指向的地址比a所在的地址要大。

代码语言:javascript
复制
*p-- = (int)(p-a);

在这里,p所指向的值是用粗的(1)在指针p减少之前在当前p和启动地址a之间减去的。

(1)未定义的行为

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72144417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档