当前位置: 首页 > news >正文

从头开始学C语言第三十一天——void指针和const指针

void指针

void指针是一种不确定数据类型的指针,可以通过强制转换类型让该指针指向任何数据类型的变量。

说明形式:void *<指针名>

对于void指针,在没有强制转换数据类型之前,不能进行指针的算术运算

#include<stdio.h>

int main()
{
    int a=10;
    void *p;

    p = &a;

    printf("%d %d \n",a,*(int*)p);

    return 0;
}

printf("%d %d\n",a,*(int*)p);

这一行代码中,如果我们直接输出*p,那系统弄会报错,因为此时指针p是void类型,也就是还不确定数据类型的指针,%d要求输出的是十进制的整型数因此会出现类型不匹配的错误,所以需要写成*(int *)p的形式;另外,因为p是指针变量,因此在强制转换数据类型时需要加上*,如果只是写成*(int)p,那么系统一样会报错,原因同样是类型不匹配。

用void指针遍历一维数组

#include<stdio.h>

int main()
{
    int a[]={1,2,3,4,5,6};
    void *p;
    int n,*pa;

    n = sizeof(a) / sizeof(int);
    p=a;
    pa=(int*)p;

    for(int i=0;i<n;i++)
    {
        p=a;
        printf("%d ",a[i]);
        printf("%d ",*((int*)p+i));
        printf("%d ",((int*)p)[i]);
        printf("%d ",pa[i]);
    }

    return 0;
}

const修饰指针

const指针的作用:常量化变量的值,换句话就是固定变量的值。一般在定义一个变量后会给该变量赋值,赋的值可以是任意的,但是加了const作修饰,那么这个变量的值就不能改变。

一般形式:
const <数据类型> 变量名 = [<表达式>];

const int a =10;//a的值就是10,不能修改;

变量有const作修饰,那么想要用指针间接访问时,指针也需要加上const修饰

一般说明形式:

const <数据类型> *<指针变量名> [= <指针运算表达式>];

常量化指针的目标不允许通过指针改变目标数值,但是指针变量存储地址可以修改

<数据类型>* const  <指针变量名> [= <指针运算表达式>];

指针变量存储地址不能改变,但是可通过*<指针变量名>改变所指变量的数值

const <数据类型>* const <指针变量名> [= <指针运算表达式>];

常量化指针的目标不允许通过指针改变目标数值,指针变量存储地址也不可以修改

#include<stdio.h>

int main()
{
    int a=10,b=5;

    const int *p1;
    p1=&a;//将a的地址放入p1中
    printf("%p\n",p1);
    //(*p)++;//所指目标变量数值不可修改
    p1++;//但是存储地址可以修改
    printf("%p\n",p1);

    int *const p2=&a;
    //p2=&b;//存放地址不可修改
    printf("%d\n",*p2);
    (*p2)++;
    printf("%d\n",*p2);

    const int * const p3=&a;
    //(*p3)++;
    //p3++;
    //存储地址不可修改,目标变量数值也不可修改

    return 0;
}
http://www.dtcms.com/a/85455.html

相关文章:

  • 表达式括号匹配(stack)(信息学奥赛一本通-1353)
  • 图论 | 岛屿数量(深搜,广搜)
  • 【动态规划】下降路径最小和
  • 【笔记分享】NCS/Zephyr 使能SPI SD卡方法介绍
  • C语言入门教程100讲(39)文件读写
  • 第二章 EXI协议原理与实现--8.4 对-2/-20所有命令的测试结果
  • JVM的组成及各部分的作用
  • 数据结构 -- 线索二叉树
  • 深度学习Python编程:从入门到工程实践
  • centos7连不上接网络
  • scoop安装教程与bug记录以及常用命令(教程总结)
  • Java算法队列和栈经常用到的ArrayDeque
  • Linux文件系统与磁盘管理
  • Java并发编程(2)
  • 华为Pura先锋盛典及鸿蒙智家产品发布,空气算法重构健康家居“阔”美学
  • UI-TARS与Midscene.js自动化探索
  • 【计算机网络】网络编程
  • 使用AI一步一步实现若依(21)
  • Koupleless 是一种模块化的 Serverless 技术解决方案
  • 系统性能评测和可靠性基础——可靠性、可用性、可维护性
  • 图解神经网络和强化学习
  • 【Go】Go语言结构体笔记
  • Ubuntu Docker 安装
  • STM32八股【3】------RAM和片上FLASH
  • 高并发系统中的限流策略:滑动窗口限流与Redis实现
  • 【QT】一文学会 QT 多线程(QThread )
  • Qt开发:QComboBox的使用
  • C++学习之云盘上传文件列表下载
  • C#基础学习(三)值类型和引用类型:编程世界的“现金“ vs “银行卡“,以及string这个“渣男“的叛变行为
  • 2059-Authentication plugin ‘caching_sha2_password‘ cannot be loaded