指针编程:高效访问内存与操作硬件的艺术
2026/9/8 21:25:24 网站建设 项目流程

指针

  1. 指针的特点

  • 编写代码更加简洁高效
  • 可以直接访问内存,要访问合法的内存地址(不要越界访问)。
  • 指针可以直接操作硬件。(操作51,arm开发板,)

2.基本概念

内存:程序运行起来后的一个数据暂存的场所。32byte 0---4G.C语言中,最小单位是1字节

code,data,heap,map/share(C库函数),stack(局部变量,函数参数,返回地址)

地址:由于地址空间比较大,c语言中,最小操作单位是一个字节。为了方便访问内存,给每个内 存都分配一个编号,叫内存地址。

指针:指针变量,专门用来存地址的变量。

3.指针相关运算符

  • & 取地址运算符:(1)获得变量在内存空间的地址(只能给变量取地址)

(2) int a; &a ; &a是一个表达式。表示的是a这个变量在内存空间的首地址。类型为 int*

  • * 解引用:只能是指针类型才能解引用。先找到对应的内存地址,活得内存地址空间的内容
int a=20; int *P=&a; //int *是类型说明符 a; //20直接访问 *p; //解引用,间接访问 值:对应内存空间的数据 类型 int

*&a ; =20 *和&运算符,是相反操作的运算符

int *p -->int * *p--> int

4.指针的定义

指针需要初始化后,才能使用。指针必须和某个内存区域关联,关联后才可使用

int *p; //野指针,p中存储的地址,是一个随机值。未经初始化的指针或指向的内存空间是一个已经被释放空间的指针 int *p1 =NULL //空指针。 NULL==((void*)0)指针已经初始化,稍后才会关联一个变量的地址。 NULL(宏定义),在stdio.h中

6.指针的算术运算

+ - * / % ++ -- int a=20; int *p1=&a; int *p2 =p1+1; +,p+1,在p int *p2=*p1 + 1; + ,p+1, 在p指针指向地址的基础上,在一个sizeof(基类型)个字节的偏移量
#include<stdio.h> int main() { int a[5]={1,2,3,4,5}; int *p=a; printf("a[0] is %d\n",a[0]); printf("addr is %d\n",*p); printf("a[0] is %d\n",*(p+0)); printf("a[0] is %d\n",*(a+0)); printf("a[0] is %d\n",*(a)); printf("a[0] is %d\n",*(a+1)); printf("a[0] is %d\n",*(a+2)); return 0;

7.指针和数组

(1)数组的数组名,是一个指向数组中第一个元素的指针常量。a中存储的地址不能发生变化。

数组名的本质就是一个指针变量(加了一些限制),指针中存储的地址不能改变

(2)sizeof不同

sizeof 是数组 int a[50]; sizeof(a)==sizeof(int) *50

int *p;sizeof(p)==8 byte 任意指针都是8字节

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询