• C语言指针入门


    指针指包含地址

    声明指针:

    int num;声明整数

    int *num;声明指针,下面的声明也是等价的,空格的使用指示个人爱好

    int* num;

    int  *  num;

    int  *num;

    int*num;


    阅读声明:

    const int *pci;  倒过来读比较好看,pci是个指针变量,pci是个int型指针变量,pci是个指向整数常亮的指针变量


    地址操作符&会返回操作数的地址,可用来初始化指针pi

    num=0;

    pi=#

    也可以像下面这样赋值

    int num;

    int *pi=#(也可以把这句改为int *pi;  pi=&num)

    num=100;(或者*pi=100)

    printf("%d ",*p);(间接引用操作符*返回指针变量指向的值,一般称为解引指针)

    那么现在打印的值也是100


    printf格式说明

    %x  显示十六进制数

    %o  显示八进制数

    %p  也是显示十六进制数(通常是大写十六进制字母的,%x是小写)


    指向函数的指针

    void (*foo)();

    该函数没有参数也无返回值,指针的名字叫foo


    null被赋值给指针,意味着指针不知想任何东西,没有指向任何内存区域,两个null指针总是想等的。另外,未初始化的指针和初始化的指针是不同,为初始化的指针可能包含任何值,而初始化为null的指针不会引用内存中的任何地址。有趣的是,我们可以给指针赋值为0,但是不能赋值为其他数,赋值为其他数会报错。如果指针被赋值为null值,那么就会被解释为二进制0.


    指针算术运算

    给指针加上整数:实际上是加的数是这个整数和指针数据类型对应字节数的乘积

    给指针减去整数:实际上是减的数是这个整数和指针数据类型对应字节数的乘积

    指针相减:一个指针减去另一个指针会得到两个地址的差值,可以用来判断数组中的元素顺序。还可以比较指针,使用><=符号进行比较,会返回0或1,从而判断数组的相对顺序。


    常量与指针

    指向常量的指针(可以将指针定义为指向常量,这意味着不能通过指针修改它所引用的值)

    例如:

    int num=5,a;

    const int *pi;(也可以写成int const *pi,这两种写法是等价的,指针pi会认为自己指向的是整数常量,所以不允许用指针修改这个常量)

    pi=&num;

    (pi=&a;(合法))

    *pi=5;(报错)

    const 可以把变量定义为常量,可以再赋值其他地址,但不能通过解引pi来修改num的值

    指向非常量的常量指针

    int  num,a;

    const int bp=500;

    int *const cpi=&num;(区分上面的int const *pci

    int *const p=&bp;(会有警告,因为常量是不可以修改的)

    *cpi=100;(合法)

    cpi=&a;(报错)

    那么现在我们可以使用*cpi=25来赋值了,但不能重新赋值指向其他地址

    还有指向常量的常量指针,以及指向‘指向常量的常量指针’的指针,因为不是经常用到,在这里不做介绍。







  • 相关阅读:
    安装lamp lnmp 一键安装包网址
    mysql float 这个大坑
    今天 运营同事发现的bug记录 上传商品时商品名称带双引号 导致输出页面时 双引号被转义
    excel 导出长数据 变成科学计数 解决办法
    mysql 基本知识 以及优化
    刷算法题记录
    windows 安装svn 要点(非安装步骤)
    《UCD火花集1-2》读后感
    我所经历的的一次问卷调查
    怎样进行批判性的思考
  • 原文地址:https://www.cnblogs.com/biaopei/p/7730672.html
Copyright © 2020-2023  润新知