当前位置: 首页 > news >正文

C语言| 指针在数组中的移动

【指针的移动】

Q:指针变量如何指向一维数组的其他元素呢?

A:如果指针变量p 已经指向一维数组的第一个元素,那么p+1 就表示指向该数组的第二个元素。

【程序代码1】

如果p指向的是第一个元素的地址,那么*p表示的就是第一个元素的内容。
同理,p+i表示的是第 i+1个元素的地址,那么*(p+i)表示第 i+1个元素的内容。
就是说p+i就是指向元素a[i]的指针,*(p+i)就等价于a[i]。

【程序代码2】

数组名表示数组的首地址,a[i]表示的是数组第i个元素。
如果指针变量也指向这个首地址,可以用p[i]表示数组的第i个元素。

p[i]和*(p+i)是等价的===“指向数组的”指针变量也可以写成“带下标”的形式。

【程序代码3】

数组a表示的是数组的首地址,元素a[i]的地址也可以用a+i表示。
如果指针变量p也指向数组a的首地址,那么 p+i 和 a+i是等价的。

只要是地址,都可以用 *地址 表示该地址所指向的内存单元中的数据。
而且也只有地址前面才需要加*,才能表示具体的数据。

在执行程序的时候,数组先是计算地址,然后转化成指针。
直接使用 *(a+i),执行速度会更快。

【程序代码1】

【指针的移动】
1 p =&a[3];
指针p,指向数组a第4个元素的地址,所以输出*p的结果为44。
2 q = a; q = q+3;
指针q指向数组a的起始地址,q+3表示数组的第4个元素。
3 r = a; 输出*(r+3),表示第4个元素。

*q+i相当于 (*q)+i;

#include <stdio.h>

int main(void)
{
    int a[] = {11, 22, 33, 44, 55, 66};
    int *p, *q, *r;

    p =&a[3]; //第一种写法
    printf("*p = %d\n", *p);

    q = a; //第二种写法
    q = q+3;
    printf("*q = %d\n", *q);

    r = a; //第三种写法
    printf("*(r+3) = %d\n", *(r+3));
    
    return 0;
}

【程序代码2】

C语言| 数组-CSDN博客

数组名表示数组的首地址,a[i]表示的是数组第i个元素。
如果指针变量也指向这个首地址,可以用p[i]表示数组的第i个元素。

p[i]和*(p+i)是等价的===“指向数组的”指针变量也可以写成“带下标”的形式。

#include <stdio.h>

int main(void)
{
    int a[] = {11, 22, 33, 44, 55, 66};
    int *p =a;

    printf("p[0] = %d\n", p[0]);
    printf("p[1] = %d\n", p[1]);
    printf("p[2] = %d\n", p[2]);
    printf("p[3] = %d\n", p[3]);
    printf("p[4] = %d\n", p[4]);
    printf("p[5] = %d\n", p[5]);

    return 0;
}

【程序代码3】

数组a表示的是数组的首地址,元素a[i]的地址也可以用a+i表示。
如果指针变量p也指向数组a的首地址,那么 p+i 和 a+i是等价的。

只要是地址,都可以用 *地址 表示该地址所指向的内存单元中的数据。
而且也只有地址前面才需要加*,才能表示具体的数据。

在执行程序的时候,数组先是计算地址,然后转化成指针。
直接使用 *(a+i),执行速度会更快。

#include <stdio.h>

int main(void)
{
    int a[] = {123, 456, 789, 888, 666, 999};
    int *p = a;

    printf("*(p+3) = %d, *(a+3) = %d\n", *(p+3), *(a+3));
    
    return 0;
}
 

http://www.xdnf.cn/news/891811.html

相关文章:

  • qt ui 转python
  • 三维GIS开发cesium智慧地铁教程(3)entity实体
  • 岩石三轴试验机
  • Spring Boot-面试题(52)
  • 每日算法刷题Day23 6.5:leetcode二分答案3道题,用时1h40min(有点慢)
  • JS深入学习 — 循环、函数、数组、字符串、Date对象,Math对象
  • 前端面试四之Fetch API同步和异步
  • c++算法学习3——深度优先搜索
  • 【java面试】框架篇
  • snprintf函数用法及注意事项详解
  • Redisson简明教程—你家的锁芯该换了
  • 71 LV信息查看
  • DeepSeek私有化部署的理性抉择:谁需要?谁不必?
  • SSH 和 Telnet 介绍、区别与使用方法
  • JAVA-springboot JUnit单元测试
  • Qt实现一个悬浮工具箱源码分享
  • LeetCode_LCR 509 斐波拉契
  • 经济学顶刊QJE:构建从非结构化文本数据中挖掘经济规律的新框架!
  • 【QT】qtdesigner中将控件提升为自定义控件后,css设置样式不生效(已解决,图文详情)
  • 实测报告:设备 AI 知识库如何帮助新手快速掌握巡检技巧?
  • 在嵌入式中C语言中static修饰的变量常量和字符串常量存储位置
  • 总结vxe-grid的一些用法
  • 精度分析方法-不确定度
  • [蓝桥杯]三体攻击
  • MySQL的并发事务问题及事务隔离级别
  • 12V降5V12A大功率WD5030A,充电器、便携式设备、网络及工业领域的理想选择
  • 大语言模型评测体系全解析(中篇):专项能力评测与行业垂直场景
  • Mysql莫名奇妙重启
  • 实现单例模式的常见方式
  • Redis Set集合命令、内部编码及应用场景(详细)