指针基础
-
指针的概念:
-
一个专门用来存放内存地址的变量,指针也就是指针变量
-
-
地址:比如 &a 是一个地址,也是一个指针,&a 指向变量 a
-
专门用于存储地址的变量,又称指针变量。
-
-
格式
-
类型 *指针变量名
-
解释:
-
“类型” : 指针变量指向的内存空间存放的数据类型
-
“指向” : 如果我保存了你的地址,那么就说我指向你
-
“*” :定义指针变量的固定格式
-
// 系统中给a申请了4个字节的内存空间 int a = 10; printf("a addr:%p\n",&a); // 定义一个指针变量用于存放a的地址 int *p = &a; // 第一部分:*p :首先p是一个变量,占用内存8个字节,存放了a的地址 // 第二部分:int 指的是指针变量所指向的内存空间放了什么类型的数据 printf("p的值:%p addr : %p\n",p,&p); printf("a的值:%d addr : %p\n",a,&a);
-
-
指针的定义:
// 用于存储 int 型数据的地址,p1 被称为 int 型指针,或称整型指针 int *p1; // 用于存储 char 型数据的地址,p2 被称为 char 型指针,或称字符指针 char *p2; // 用于存储double型数据的地址,p3 被称为 double 型指针 double *p3;
-
指针的赋值:赋给指针的地址,类型需跟指针的类型相匹配。
int a = 100; p1 = &a; // 将一个整型地址,赋值给整型指针p1 char c = 'x'; p2 = &c; // 将一个字符地址,赋值给字符指针p2 double f = 3.14; p3 = &f; // 将一个浮点地址,赋值给浮点指针p3
-
指针的索引:通过指针,取得其指向的目标
*p1 = 200; // 将 p1 指向的目标(即a)修改为200,等价于 a = 200; *p2 = 'y'; // 将 p2 指向的目标(即c)修改为'y',等价于 c = 'y'; *p3 = 6.6; // 将 p3 指向的目标(即f)修改为6.6,等价于 f = 6.6;
-
指针的尺寸
-
指针尺寸指的是指针所占内存的字节数
-
指针所占内存,取决于地址的长度,而地址的长度则取决于系统寻址范围,即字长
-
结论:指针尺寸只跟系统的字长有关,跟具体的指针的类型无关
-
在32位系统,指针的大小占用4字节
-
在64位系统,指针的大小占用8字节
// 指针大小 int a = 10; char b = 'c'; float c = 85.5; char *p1 = &b; int *p2 = &a; float *p3 = &c; printf("p1 size : %ld\n",sizeof(p1)); printf("p2 size : %ld\n",sizeof(p2)); printf("p3 size : %ld\n",sizeof(p3));
-