iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言指针运算实例分析
  • 111
分享到

C语言指针运算实例分析

2023-06-30 01:06:45 111人浏览 八月长安
摘要

这篇文章主要介绍“C语言指针运算实例分析”,在日常操作中,相信很多人在C语言指针运算实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”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语言指针运算实例分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    --结束END--

    本文标题: C语言指针运算实例分析

    本文链接: https://www.lsjlt.com/news/327042.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

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

    下载Word文档
    猜你喜欢
    • C语言指针运算实例分析
      这篇文章主要介绍“C语言指针运算实例分析”,在日常操作中,相信很多人在C语言指针运算实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言指针运算实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
      99+
      2023-06-30
    • C语言指针使用实例分析
      今天小编给大家分享一下C语言指针使用实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。何为指针指针这玩意说白了,就是用来...
      99+
      2023-07-02
    • C语言指针应用实例分析
      这篇文章主要讲解了“C语言指针应用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言指针应用实例分析”吧!1、指针是什么指针理解的2个要点:平时口语中说的指针,通常指的是指针变量,...
      99+
      2023-06-30
    • C语言指向函数的指针实例分析
      这篇文章主要介绍“C语言指向函数的指针实例分析”,在日常操作中,相信很多人在C语言指向函数的指针实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言指向函数的指针实例分析”的疑惑有所帮助!接下来,请跟...
      99+
      2023-07-02
    • C语言基础野指针与空指针示例分析
      目录一:野指针野指针的成因1. 指针未初始化2. 指针越界访问3 .指针释放后未置空规避野指针1. 初始化指针 2. 避免指针越界 3 避免返回局部变量的地址 4. 开辟的指针释放后...
      99+
      2024-04-02
    • C语言指针和数组应用实例分析
      这篇文章主要介绍“C语言指针和数组应用实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言指针和数组应用实例分析”文章能帮助大家解决问题。一、指针和数组分析-上1.数组的本质数组是一段连续的...
      99+
      2023-06-30
    • C语言运算符的重载实例分析
      本篇内容介绍了“C语言运算符的重载实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!写一个Add函数我们先讨论下面代码,并复习前面的内容...
      99+
      2023-06-26
    • C++中指针实例分析
      这篇文章主要介绍“C++中指针实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++中指针实例分析”文章能帮助大家解决问题。计算机的内存模型CPU是计算机的核心部件,要想让一个CPU工作,就必...
      99+
      2023-06-19
    • C语言结构体指针的示例分析
      这篇文章给大家分享的是有关C语言结构体指针的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。写结构体指针前,先说一下 . 号和 -> 的区别记得当初刚学C语言的...
      99+
      2023-06-20
    • C语言运算符与表达式实例分析
      本篇内容主要讲解“C语言运算符与表达式实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言运算符与表达式实例分析”吧!表达式函 数 概 述表达式是C语言的主体。在C语言中,表达式由操作符...
      99+
      2023-07-02
    • go语言有指针运算吗
      本篇内容介绍了“go语言有指针运算吗”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!go语言没有指针运算。go语言的语法上是不支持指针运算的,...
      99+
      2023-07-04
    • C++的this指针实例分析
      这篇文章主要介绍了C++的this指针实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++的this指针实例分析文章都会有所收获,下面我们一起来看看吧。this指针是存在与类的成员函数中,指向被调用函数...
      99+
      2023-06-27
    • C语言指针综合应用的示例分析
      这篇文章将为大家详细讲解有关C语言指针综合应用的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。指针是什么?指针是c语言中的一个重要概念,也是C语言的一个重要的特色,正确而灵活地运用它,可以使程序简...
      99+
      2023-06-29
    • C语言结构体指针案例解析
      写结构体指针前,先说一下 . 号和 -> 的区别 记得当初刚学C语言的时候,搞不清结构体的 . 号和 -> ,经常混淆二...
      99+
      2024-04-02
    • Go语言和C语言指针区别对比分析
      Go语言和C语言是两种常用的编程语言,它们在指针的使用上有着一定的区别。本文将通过具体的对比分析以及代码示例来说明Go语言和C语言中指针的区别。 一、概述指针是一种用来存储变量地址的特...
      99+
      2024-03-07
      go语言 c语言 指针
    • Go语言使用指针的示例分析
      这篇文章给大家分享的是有关Go语言使用指针的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。普通指针和C语言一样, 允许用一个变量来存放其它变量的地址, 这种专门用于存储其它变量地址的变量, 我们称之为指针...
      99+
      2023-06-20
    • C语言中二级指针解析(指向指针的指针)
      目录二级指针(指向指针的指针)二级指针的定义与理解二级指针定义格式二级指针赋值实例二级指针(指向指针的指针) 指针可以指向一份普通类型的数据,例如 int、double、char 等...
      99+
      2024-04-02
    • C语言编程const遇上指针分析
      const关键字 可以有很多用处,比如: #define ROW 10 就代表ROW的值恒为10,不可修改。 而 const int ROW=10; 也可以将值恒定,无法修...
      99+
      2024-04-02
    • C语言中返回值指针函数的示例分析
      这篇文章主要为大家展示了“C语言中返回值指针函数的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中返回值指针函数的示例分析”这篇文章吧。   #inc...
      99+
      2023-06-29
    • C语言排序算法实例分析
      这篇文章主要讲解了“C语言排序算法实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言排序算法实例分析”吧!1、直接插入排序基本思想:当插入第i(i>=1)个元素时,前面的ar...
      99+
      2023-06-29
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作