c - 指针如何在以下代码块中工作?
问题描述
我试图了解指针是如何工作的,我被困在这段代码中。有人能解释一下这个代码块中的表达式'*(a+tally)'指向哪里吗?其背后的逻辑是什么?
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5},b[5]={10,20,30,40,50},tally;
for(tally=0;tally< 5;++tally)
{
*(a+tally)= *(tally+a) + *(b+tally);
}
for(tally=0;tally< 5;tally++)
{
printf("%d" *(a+tally));
}
return 0;
}
解决方案
例如这个表达式
*(a+tally)
等价于表达式
a[tally]
并在 index 处产生数组的(左值)元素tally
。
结果这个循环
for(tally=0;tally< 5;++tally)
{
*(a+tally)= *(tally+a) + *(b+tally);
}
相当于下面的循环
for(tally=0;tally< 5;++tally)
{
a[tally] = a[tally] + b[tally];
}
那是表达
a + tally
或等价的表达式
tally + a
指向a
索引等于 的值的数组元素tally
。
请注意,当表达式a[tally]
被计算为 like*( a + tally )
或 as 时*( tally + a )
(由于加法的交换性质),那么表达式a[tally]
也可能被重写为 like tally[a]
。
推荐阅读
- sql-server - 无法获取所有数据库的数据库统计信息
- java - Itext7 将公共方法移至受保护
- c# - Azure blob stoarge 上传文件需要更多时间
- python - 在为 pytorch(python 环境)安装 apex 扩展时,显示以下错误,无法解决此问题
- django - 如何从 django 视图向消费者(django-channels)发送消息?
- time - 将时间间隔设置为指定值
- java - Groovy 方法名称(java.lang.ClassFormatError:非法方法名称)
- vb.net - 连接字符串函数
- eclipse - Eclipse:有没有办法打开所有修改过的文件?
- c# - 如何动态绑定数据到自适应卡?