1 概念
指针变量也是一个变量,其值是一个整数(整数的大小取决于操作系统的位数,地址虽然是一个整数,但地址是一个特殊的整数,是不能直接通过整数来操作的,* 告诉编译器变量是指向地址的,而不是简单的指向一个整数),指针存放的内容是一个地址,该地址指向一块内存空间(内存的存储最小单位是字节,每个字节都有一个唯一的编号,这个编号就是内存地址)。
指针定义简单解释 指针定义简单解释 指针定义简单解释2 定义
int a = 10 ; int *p = &a; // 其中 int *p = &a 等同于 int *p; p=&a; // *p : 指针指向的内存空间存放的值 // int *p 表示定义一个指针变量
指针使用3 注意点
无类型指针 : 定义一个指针变量,但不指定它指向具体哪种数据类型。可以通过强制转化将 void*转化为其他类型指针,也可以用(void*)将其他类型的指针强制转化为void类型的指针
NULL在c语言中定义为 (void*)0
空指针 : 指向NULL的指针 ;
野指针 :没有具体指向任何变量地址的指针
野指针举例指针的兼容性 :我们可以把一个char*赋值给int*,不可以把一个double*赋值给int*,c语言给警告,c++直接报错
int a = 0x1234; char *p = &a ; printf("%x\n",*p);
char *p = &a ; 会导致数据的丢失
指针的兼容 指针的兼容如何把一个整数的四个字节都取出来?
取出整数四个字节4 指针变量移动时的变化
int array[100] = [1,2,3,4,5,6];
int *p = array // 数组取地址直接用数组名 等同去地址符号 & 等同于 int*p;p=array
printf("%u\n",p);
p++; // 指针移动一个int的内存大小,换成其他数据类型相同
prift("%u\n",p);
5 指向常量的指针与指针常量
const6 指针运算
指针运算不是指针对应的整数简单的加减,是指针类型对应数据类型字节数加减
指针运算 指针运算5 指针变量写法不同时的区别
网友评论