• c 指针(一)


    一:什么是指针

    变量i  的存储地址为P(假设为2000),*P  为指针变量  

    一个变量的地址称为该变量的“指针”。如果有另一个变量专门存放另一变量的地址(指针),则它称为“指针变量”。

    指针是一个地址,指针变量是存放地址的变量。

    二:指针变量

    int a =1,b=2;

    int *p1;

    p1=&a;//P1为指针变量     不可以写成*p1=&a;(*p1是变量a的值)

    int *p2=&b;//可以同时定义和初始化

    注:一个变量的指针:1.以存储单元编号表示的地址。2,指向存储单元的数据类型(int char...)

    指向整型数据的指针类型 int*,读作,指向int 的指针  或 int指针

    指针变量应用实例:swap

    #include<stdio.h>
    void swap(int *point1,int *point2);
    int main()
    {
    int a =1,b=2;
    int *p1,*p2,*p;
    p1=&a;p2=&b;
    printf("a=%d b=%d ",a,b);
    printf("p1=%d p2=%d ",p1,p2);
    swap(p1,p2);//p=p1;p1=p2;p2=p;可以实现swap
    printf("a=%d b=%d ",*p1,*p2);
    printf("p1=%d p2=%d ",p1,p2);
    return 0;
    }

    void swap(int *point1,int *point2)
    {
    int *p;
    p = point1;
    point1 = point2;
    point2 = p;
    }

    结果:a,b的值并没有改变

    在函数调用时,p1的值传给point1,p2的值传给point2,执行完swap后,point1与point2的值是互换的,但并未影响到p1,p2。在函数结束时,变量point1和point2释放了。main函数中的p1,p2并未互换。也就是说,由于“单向传送”的“值传递”方式,形参值的改变不能使实参的值随之改变。

    void swap(int *point1,int *point2)
    {
    int temp;
    temp = *point1;
    *point1 = *point2;
    *point2 = temp;
    }

    结果 :a,b值互换,p1,p2地址没换。

    main()

    {

    swap(a,b);

    }


    void swap(int x,int y)
    {
    int p;
    p = x;
    x = y;
    y = p;
    }

    结果:x,y 的值会变,但是,ab不变

    总结:不可能通过执行调用函数来改变实参指针变量的值,但是可以改变实参指针变量所指变量的值。

    函数调用可以而且只可以得到一个返回值,而使用指针变量作参数,可以得到多个变化了的值。

    三:指针数组

    数组名代表数组中的首元素的地址。

    int a[10];
    int *p = &a[0];//等价: int *p = a;

    //*(p+2)  *(p+2)     a[2] 三者等价

    注意:++  与*同优先级,结合方向自由而左

    当用数组名作参数时,如果形参数组中各元素的值发生改变,实参的值也会改变。

    实参数组名代表该数组首元素的地址,而形参是用来接收从实参传递过来的数组首元素地址的。

    int i,arr[10],*p=arr;//指针变量p指向arr[0]
    int i ,*arr://指针变量arr未指向数组元素

    如果用指针变量作为实参,必须先试指针变量有确定的值,指向一个已经定义的对象。

    四:通过指针引用多维数组

    a[3][5];

    数组名a表示二维数组首行的首地址。

    a+1表示序号为1的行的首地址。

    a[0]的地址&a[0][0] ,a[1]的地址&a[1][0],a[1][1]的地址 a[1]+1。 

  • 相关阅读:
    Docker笔记
    Fedora dnf配置
    Vue杂谈
    各类技术集锦
    在.NET Core 里使用 BouncyCastle 的DES加密算法
    Srapy爬虫之必备知识
    scrapy爬虫之环境安装
    Git很简单--图解攻略
    Vue.js下载方式及基本概念
    ajax与jsonp定义及使用方法
  • 原文地址:https://www.cnblogs.com/zle1992/p/5310154.html
Copyright © 2020-2023  润新知