我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言指针运算实例分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言指针运算实例分析

这篇文章主要介绍“C语言指针运算实例分析”,在日常操作中,相信很多人在C语言指针运算实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言指针运算实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    指针运算

    指针±整数

    指针-指针

    指针的关系运算

    4.1 指针±整数
    #define VALUE 5int main(){float values[VALUE];float *vp;//指针+-指针,关系运算for (vp = &values[0]; vp < &values[VALUE];){*vp++ = 0;//通过这样完成初始化}for (int i = 0; i < VALUE; i++){printf("%d ", values[i]);}return 0;}

    C语言指针运算实例分析

    4.2 指针-指针

    int main(){int arr[10] = { 0 };printf("%d\n", &arr[9] - &arr[0]);//得到元素的个数printf("%d\n", sizeof(arr)/sizeof(arr[0]));//计算元素个数int* p0 = &arr[0];int* p9 = &arr[9];printf("%d\n", (p9 - p0));//得到元素的个数return 0;}

    通过数组首尾元素的地址相减,得出的就是数组元素的个数,

    -int*表示指针指向的地址里面,存放的数据类型是整形,占用4个字节

    • 数组元素地址+1,就是寻找下一个元素的地址,就会移动4个字节

    C语言指针运算实例分析

    通过调试更加清楚的观察到这一现象,int 数组每个元素占用四个字节:

    • &arr[0]: 0x005cf7f8

    • &arr[0]+1: 0x005cf7fc,地址移动1位,即int*指针移动1位,字节增加4个。

    C语言指针运算实例分析

    前提条件:两个指针必须指向同一块空间:

    char ch[5];int arr[6];%arr[4]-&ch[3];//错误的

    前面的文章介绍了字符串长度的方法两种方法:

    • 循环

    • 递归

    这里介绍第三种方法, 指针

    int mylen(char* pa)//传参是数组首元素的地址{char* p = pa;//首元素地址while (*pa)//元素不是‘0'{pa++;//通过地址访问字符串}//结尾字符0的地址减首元素地址return pa - p;//指针相减是元素的个数}int main(){char arr[] = "abcdef";int len = mylen(arr);printf("%d", len);return 0;}

    4.3 指针的关系运算

    标准规定:允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与

    指向第一个元素之前的那个内存位置的指针进行比较

    int main(){//for (vp = &values[5]; vp > &values[0];){*--vp = 0;}for (vp = &values[5-1]; vp >= &values[0];vp--)//不允许//地址会指向首元素前面的地址,这是不允许的{*vp = 0;}return 0;}

    5、指针和数组

    int main(){int arr[10] = {1,2,3,4,5,6,7,8,9,0};printf("%p\n", arr);printf("%p\n", &arr[0]);int *p = arr;//p存放的是数组首元素的地址return 0;}

    数组名和数组首元素的地址是一样的。数组名表示的是数组首元素的地址。(2种情况除外,数组系列文章详细介绍了)

    C语言指针运算实例分析

    既然可以把数组名当成地址存放到一个指针中,我们使用指针来访问一个就成为可能

    int main(){int arr[] = {1,2,3,4,5,6,7,8,9,0};int *p = arr; //指针存放数组首元素的地址int sz = sizeof(arr)/sizeof(arr[0]);for(int i=0; i<sz; i++){printf("&arr[%d] = %p <====> p+%d = %p\n", i, &arr[i], i, p+i);}return 0;}

    C语言指针运算实例分析

    观察上图,所以 p+i 其实计算的是数组 arr 下标为 i 元素的地址。那就可以直接通过指针来访问数组:

    int main(){int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = arr;int sz = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < sz; i++){printf("%d ",*(p + i));}printf("\n");for (int i = 0; i < sz; i++){printf("%d ", *(p++));}printf("\n");for (int i = 0; i < sz; i++){printf("%d ", arr[i]);}return 0;}

    C语言指针运算实例分析

    6、二级指针

    指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里?这就是 二级指针

    int main(){int a = 10;int* pa = &a;int** ppa = &pa;return 0;}
    • a的地址存放在指针pa中,pa是一级指针

    • pa的地址存放在ppa中,ppa是二级指针

    C语言指针运算实例分析

    对于二级指针的运算有:

    *ppa 通过对ppa中的地址进行解引用,这样找到的是 pa , *ppa 其实访问的就是 pa .

    int b = 20;*ppa = &b;//等价于 pa = &b;

    **ppa 先通过 *ppa 找到 pa ,然后对 pa 进行解引用操作: *pa ,那找到的是 a

    **ppa = 30;//等价于*pa = 30;//等价于a = 30;

    7、指针数组

    指针数组是指针还是数组?

    是数组。是存放指针的数组

    在数组系列文章中,已经介绍了整形数组,字符数组:

    int arr1[5];//占用20个字节char arr2[5];//占用5个字节

    C语言指针运算实例分析

    7.1 举例 1

    指针数组:

    int main(){int data1[] = { 1,2,3,4,5 };int data2[] = { 2,3,4,5,6 };int data3[] = { 3,4,5,6,7 };//看成二维数组int* arr[3] = { data1,data2,data3 };for (int i = 0; i < 3; i++){for (int j = 0; j < 5; j++){//[]是操作符printf("%d ", arr[i][j]);//不需要解引用}printf("\n");}   return 0;}

    arr3是一个数组,有五个元素,每个元素是一个整形指针,就是一个地址:

    • arr[0],为元素data1,是指针变量,本身也是一维数组 { 1,2,3,4,5 } 的数组名,代表首元素地址

    • arr[1],为元素data2,是指针变量,本身也是一维数组 { 2,3,4,5,6 } 的数组名,代表首元素地址

    • arr[2],为元素data3,是指针变量,本身也是一维数组 { 3,4,5,6,7 } 的数组名,代表首元素地址

    C语言指针运算实例分析

    C语言指针运算实例分析

    通过调试也能发现:

    • 指针数组首元素data,是指针变量,也是一维数组首元素的地址

    • 通过数组名 + i 就能访问数组里的元素

    • 指针数组可看成二维数组

    arr[0]=data1;//指针数组首元素data,是指针变量,也是一维数组首元素的地址arr[0][0]=data1[0];//看成一维数组arr[0][1]=data1[1];arr[0][2]=data1[2];arr[0][3]=data1[3];arr[0][4]=data1[4];

    C语言指针运算实例分析

    打印结果见下图:

    C语言指针运算实例分析

    代码换成下面这个效果一样,从地址的解引用角度去写:

    int main(){int data1[] = { 1,2,3,4,5 };int data2[] = { 2,3,4,5,6 };int data3[] = { 3,4,5,6,7 };//看成二维数组int* arr[3] = { data1,data2,data3 };for (int i = 0; i < 3; i++){for (int j = 0; j < 5; j++){printf("%d ", *(arr[i]+j));//地址访问解引用}printf("\n");}   return 0;}

    C语言指针运算实例分析

    7.2 举例 2

    指针数组中元素都是指针变量,就是地址

    int main(){int a = 10;int b = 11;int c = 12;int d = 13;int e = 14;int* arr[5] = { &a,&b,&c,&d,&e };//指针数组存放的元素是指针变量,就是地址for (int  i = 0; i < 5; i++){printf("%d ", *(arr[i]));//地址解引用}return 0;}

    C语言指针运算实例分析

    到此,关于“C语言指针运算实例分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    C语言指针运算实例分析

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    C语言指针运算实例分析

    这篇文章主要介绍“C语言指针运算实例分析”,在日常操作中,相信很多人在C语言指针运算实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言指针运算实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧
    2023-06-30

    C语言指针应用实例分析

    这篇文章主要讲解了“C语言指针应用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言指针应用实例分析”吧!1、指针是什么指针理解的2个要点:平时口语中说的指针,通常指的是指针变量,
    2023-06-30

    C语言指针使用实例分析

    今天小编给大家分享一下C语言指针使用实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。何为指针指针这玩意说白了,就是用来
    2023-07-02

    C语言指向函数的指针实例分析

    这篇文章主要介绍“C语言指向函数的指针实例分析”,在日常操作中,相信很多人在C语言指向函数的指针实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言指向函数的指针实例分析”的疑惑有所帮助!接下来,请跟
    2023-07-02

    C语言指针和数组应用实例分析

    这篇文章主要介绍“C语言指针和数组应用实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言指针和数组应用实例分析”文章能帮助大家解决问题。一、指针和数组分析-上1.数组的本质数组是一段连续的
    2023-06-30

    C语言结构体指针的示例分析

    这篇文章给大家分享的是有关C语言结构体指针的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。写结构体指针前,先说一下 . 号和 -> 的区别记得当初刚学C语言的时候,搞不清结构体的 . 号和 -> ,经常混
    2023-06-20

    C语言运算符的重载实例分析

    本篇内容介绍了“C语言运算符的重载实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!写一个Add函数我们先讨论下面代码,并复习前面的内容
    2023-06-26

    C++中指针实例分析

    这篇文章主要介绍“C++中指针实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++中指针实例分析”文章能帮助大家解决问题。计算机的内存模型CPU是计算机的核心部件,要想让一个CPU工作,就必
    2023-06-19

    C语言指针综合应用的示例分析

    这篇文章将为大家详细讲解有关C语言指针综合应用的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。指针是什么?指针是c语言中的一个重要概念,也是C语言的一个重要的特色,正确而灵活地运用它,可以使程序简
    2023-06-29

    C语言运算符与表达式实例分析

    本篇内容主要讲解“C语言运算符与表达式实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言运算符与表达式实例分析”吧!表达式函 数 概 述表达式是C语言的主体。在C语言中,表达式由操作符
    2023-07-02

    C++的this指针实例分析

    这篇文章主要介绍了C++的this指针实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++的this指针实例分析文章都会有所收获,下面我们一起来看看吧。this指针是存在与类的成员函数中,指向被调用函数
    2023-06-27

    go语言有指针运算吗

    本篇内容介绍了“go语言有指针运算吗”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!go语言没有指针运算。go语言的语法上是不支持指针运算的,
    2023-07-04

    Go语言和C语言指针区别对比分析

    Go语言和C语言是两种常用的编程语言,它们在指针的使用上有着一定的区别。本文将通过具体的对比分析以及代码示例来说明Go语言和C语言中指针的区别。一、概述指针是一种用来存储变量地址的特殊数据类型,它可以被用于直接访问内存中的数据。C语言是一
    Go语言和C语言指针区别对比分析
    2024-03-07

    C语言中返回值指针函数的示例分析

    这篇文章主要为大家展示了“C语言中返回值指针函数的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中返回值指针函数的示例分析”这篇文章吧。 #includevo
    2023-06-29

    Go语言使用指针的示例分析

    这篇文章给大家分享的是有关Go语言使用指针的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。普通指针和C语言一样, 允许用一个变量来存放其它变量的地址, 这种专门用于存储其它变量地址的变量, 我们称之为指针
    2023-06-20

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录