首页 > 其他分享 >C语言指针篇

C语言指针篇

时间:2024-09-09 18:50:13浏览次数:12  
标签:int 读写 C语言 地址 类型 buf 指针

一.指针的本质

        指针的本质就是有类型的地址。地址指的是地址总线上的地址码表,而类型决定了我们操作这个指针时,要从这个地址码上读写的长度。即指针的类型决定读写一个地址块的数据长度(1字节、2字节、4字节还是结构体定义的长度)。

        比如(uint8_t *)(0x12345678):C语言中*可以把他后面的内容变成地址码,所以(*)0x12345678)就是把这个常数转化为一个地址码(即指针),那这个指针的类型是什么呢?是uint8_t类型的。那么我们去操作这个指针的时候,就是读写0x12345678这个地址上一字节的内容。

写示例:
*((uint8_t *)(0x12345678))= 0x55;

二.指针的大小、指针变量的值、指向指针的指针以及指针的自增

1.指针的占用的字节数就是单片机地址总线的字节数(位数/8);

2.指针p本身是个变量,只不过这个变量的值是他所指向的内存的地址,通过*p就可以读写那块内  存,读写的数据长度就是指针类型的大小

3.

    如上图所示,q就是个指向指针的指针,q的值就是指针p的地址。通过*q就可以直接读写p的值,其实此时*q就是p。而相对的,p是一个指针,他的值就是buf[8]这个数组第一个元素的地址,通过*p就可以读写buf[0]。我们前面说过,指针是有类型的地址,而当前类型是int8_t,那么让p+1,地址就只会往后走一个int8_t的长度,那么p+1的数值就是buf[1]的地址,*(p+1)就是操作buf[1]了。

    再如果指针p的类型是int,即int *p,如果p等于buf[0]的地址,那p+1以后的值就是往后int长度(4个),p+1的值就是&buf[4],*(p+1)访问的就是buf[4]。

总结

三.数组和指针

1.不要把数组a[n]后面的方括号当成是数组的专利

[n]的真正含义是以前面的指针(有类型的地址)为基准,向后移动长度(n*类型大小)个字节后的地址位置,取出这个位置上的值。

比如:

int a[10];

int *p;

p = a;

此时就可以直接操作p[5],p[5]就是a[5]。

标签:int,读写,C语言,地址,类型,buf,指针
From: https://blog.csdn.net/sycc512/article/details/142040351

相关文章

  • 双指针的使用
    双指针-在原来的数组上修改元素(应用于)左指针不动,右指针移动,当移动到与左指针不同的元素时,左指针移动一位,将那位的元素改为右指针的值;随后,右指针继续移动。publicstaticintremoveDuplicates(int[]nums){//双指针intnum=0;for(inti=1;i<......
  • 0基础学习C语言 1
    通常我们写代码或者学习看demo时都会用到二进制或者十六进制,所以首先需要学会各个进制间的换算二进制:0和1八进制:0~7十进制:0~9十六进制:0~9,A~F二进制(B)八进制(Q)十进制十六进制(H)000011111022211333100444101555110666111777100010881001119910101210A10111311B11001412C110......
  • PLC结构化文本(ST)——接口指针转换运算符(__QUERYPOINTER)
    PLCStructuredTextObjectOrientedProgrammingPLC结构化文本(ST)——接口指针转换运算符(__QUERYPOINTER)__QUERYPOINTER运算符__QUERYPOINTER是IEC61131-3的扩展,该运算符允许在运行时将功能块的接口引用转换为指针。返回值BOOL类型:True表示转换成功,Flase表示转换失败。出于......
  • 今日算法随笔:填充每个节点的下一个右侧节点指针 II
    题目链接:117.填充每个节点的下一个右侧节点指针II题目描述给定一个二叉树,填充它的每个next指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将next指针设置为NULL。初始状态下,所有next指针都被设置为NULL。示例:输入:root=[1,2,3,4,5,null,7]输出:[......
  • [oeasy]python0033_先有操作系统还是先有编程语言_c语言是怎么来的
    [趣味拓展]计算机语言起源_c语言诞生......
  • 【C++学习笔记】数组与指针(三)
    目录一、数组1.1数组声明与赋值1.2数组的特点特点1:任意类型均可创建数组特点2:固定大小特点3:内存连续且有序特点4:C++无数组下标越界错误特点5:数组变量不记录数据1.3遍历数组普通for循环foreach增强循环1.4字符数组1.5多维数组二维数组三维数组遍历二维数......
  • 20240909_041725 c语言 代码注释 两种
    两种注释注释示例......
  • 20240909_031725 c语言 执行输出语句的流程
    源代码-》编译后代码-》可执行代码下图为可执行代码的示例路径:......
  • 【C语言基础】函数与变量
    函数的分类:从定义角度分:库函数:随C语言编译器提供的。无须用户定义,只需在程序前包含含有该函数原型的头文件。自定义函数:用户自己定义的函数。从函数返回结果角度分:有返回值函数:函数在执行完需要返回一个值,这个值就是函数的值。无返回值函数:函数只执行任务,不返回任何值......
  • C语言深入理解指针4
    1.回调函数回调函数是通过函数指针调用的函数将函数指针作为参数传递给另一个函数,当这个函数指针被用来调用其所指向的函数时,被调用的函数就是回调函数,回调函数不是应该由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外一方调用的,用于对该事件或条件进行响应......