注册 登录
编程论坛 嵌入式开发

嵌入式指针有哪些知识点?

cdhqyj 发布于 2023-05-23 14:13, 346 次点击
01
什么是指针?
在C语言中,操作系统屏蔽掉所有硬件存储器,为程序员提供了一个类似数组的内存空间,这个内存空间的基本单位是字节,也是程序员能够操作的基本单位。
指针就是每块基本单位大小的内存的地址,通常被叫做地址或者地址编号。将字节大小的内存分别进行编号,有助于我们对于内存的使用。
用来存放指针的变量是指针变量,这也是程序员通常所说的指针。以下所有的指针变量统称为指针。
声明指针的格式:
存储类型 指针类型 * 指针名;
举例:
char *p;
int *p;

02
存储类型
不单独声明时,有两种情况:
情况1:局部定义指针
时,默认为auto类型。表示当进入代码块时,系统为自动变量分配内存。在块内,这些变量被定义,并被认为它是局部于本块的。当退出块时,系统释放分配给自动变量的内存,因此,变量值就丢失了。重新进入块,系统会为自动变量再次分配内存,原先的值已经没有了。
情况2:全局定义指针时,默认为extern类型。表示为该变量永久的分配存储,直到当前进程运行结束。全局变量在整个程序执行期间都是存在的。

04*号
*号有两个作用:
作用1:在定义时,和普通变量做区分,如果没有*号,那就和普通变量的定义格式一致,没有任何区别了;
作用2:在使用时,*变量名这个形式表示拿到指针保存的地址上的数据。

05
指针名
指针名是一个标识符,要符合标识符的命名规范;
注:标识符的命名规范:
1. 由数字、字母、下划线组成;
2. 不能以数字开头;
3. 不能和关键字冲突,严格区分大小写。

06
指针的大小?
指针的大小和类型没有关系,和CPU的运行时的寻址位数有关系。
在32位操作系统中,32位CPU一次最大能够访问32位数据,所以指针的大小就是32位,即4字节;
在64位操作系统中,64位CPU一次最大能够访问64位数据,所以指针的大小就是64位,即8字节。验证:
使用64位编译器:
linux@ubuntu:~$gcc01test.c

linux@ubuntu:~$./a.out
sizeof(char*)=8
sizeof(short*)=8
sizeof(int*)=8
sizeof(long*)=8
linux@ubuntu:~$cat01test.c
#include<stdio.h>
int main(intargc,constchar*argv[])
{
     printf("sizeof(char*)=%ld\n",sizeof(char*));
     printf("sizeof(short*)=%ld\n",sizeof(short*));
     printf("sizeof(int*)=%ld\n",sizeof(int*));
     printf("sizeof(long*)=%ld\n",sizeof(long*));
     return0
}
使用32位编译器:
linux@ubuntu:~$gcc01test.c-m32

linux@ubuntu:~$./a.out
sizeof(char*)=4
sizeof(short*)=4
sizeof(int*)=4
sizeof(long*)=4
linux@ubuntu:~$cat01test.c
#include<stdio.h>
int main(intargc,constchar*argv[])
{
      printf("sizeof(char*)=%d\n",sizeof(char*));
      printf("sizeof(short*)=%d\n",sizeof(short*));
      printf("sizeof(int*)=%d\n",sizeof(int*));
      printf("sizeof(long*)=%d\n",sizeof(long*));
      return0;
}
0 回复
1