栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构预备知识(指针)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构预备知识(指针)

数据结构预备知识(指针) 一、指针的重要性

指针时c语言的灵魂

二、相关定义
  1. 地址:内存单元的编号(从零开始的非负整数,范围:0—FFFFFFFF)
  2. 指针就是地址,地址就是指针
  3. 指针变量:存放内存单元地址的变量,指针的本质就是一个操作受限的非负整数。
三、指针的分类 1.基本类型的指针
  • 基本概念:

    int i=10;
    int* p = &i;  //等价于int* p; p = &i;
    

    详解这两步操作:

    1. p存放了i的地址,所以我们说p指向了i
    2. p和i是完全不同的变量,修改其中任意一个变量的值,不会影响另一个变量的值
    3. p指向i,*p就是i变量本身,更形象地说所有出现 *p的地方都可以换成i。
  • 总结:

    • 如果一个指针变量(假定为p)存放了某个普通变量(i)的地址,那我们就可以说:“p指向了i”,但是p与i是两个变量,修改p的值不影响i的值,修改i的值不影响p的值。
    • *p等价于i,或者说 *p可以与i在任何地方互换,
    • *指针变量,就完全等价于该普通变量。
  • 注意:

    • 指针变量也是变量,只不过它存放的不是内存单元的内容,只能存放内存单元的地址
    • 普通变量前不能加*
    • 常量和表达式前不能加&
2.如何通过被调函数修改主调函数中普通变量的值
  1. 实参为相关变量的地址
  2. 形参为以该变量的类型为类型的指针变量
  3. 在被调函数中通过*形参变量名的方式就可以修改主调函数中普通变量的值
#include

void f(int* p){
    *p = 100;
}

int main(void){
    int i=10;
    
    printf("%dn",i);
    
    f(&i);
    
    printf("%dn", i);
    
    return 0;
}

四、指针与数组 1.指针和一维数组
  • 数组名:一维数组名是一个指针常量,他存放的是一维数组第一个元素的地址,他的值不能被改变,一维数组名指向的是数组的第一个元素。
2.数组下标和指针的关系

​ a[i]<==>*(a+i)

假设指针变量的名字为p,则p+i的值是p+i*(p所指向的变量所占的字节数)

3.指针变量的运算
  • 指针变量不能相加,不能相乘,不能相除
  • 如果两指针变量属于同意数组,则可以相减
  • 指针变量可以加减一整数,前提是最终结果不能超过指针变量指向的普通变量的地址范围。

注意:

  • p+i的值是p+i*(p所指向的变量所占字节数)
  • p-i的值是p-i*(p所指向的变量所占字节数)
  • p++《==》p+1
  • p–《==》p-1
4.总结
#include 
#include 


//定义函数修改数组的值,并遍历
void f(int* p, int len){
  *(p+1) = 20;   //将数组的第2个元素的值改为20;

    //遍历数组
    for(int i=0; i
        printf("%dn", *(p+i));
    }

}

int main(void)
{
    int arr[5] = {1, 2, 3, 4, 5}; //定义数组

    f(arr, 5);
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/968921.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号