指针的相关概念
操作系统给每个存储单元分配了一个编号,从0x00 00 00 00 ~0xff ff ff ff,这个编号咱们称之为地址。
指针就是地址。
指针变量:是个变量,是个指针变量,即这个变量用来存放一个地址编号。
在32位平台下,地址总线是32位的,所以地址是32位编号,所以指针变量是32位的即4个 字节。
注意:
-
无论什么类型的地址,都是存储单元的编号,在 32位平台下 都是4个字节, 即任何类型的指针变量都是4个字节大小。
-
对应类型的指针变量,只能存放对应类型的变量的地址。e.g.:整型的指针变量,只能存放整型变量的地址
扩展
:
字符变量 char ch; ch占1个字节,它有一个地址编号,这个地址编号就是ch的地址
整型变量 int a; a占4个字节,它占有4个字节的存储单元,有4个地址编号。
指针的定义方法
- 简单的指针 :
数据类型 * 指针变量名;int * p;//定义了一个指针变量p在 定义指针变量的时候 * 是用来修饰变量的,说明变量p是个指针变量。变量名是 p
-
关于指针的运算符
& 取地址 、 *取值。&:获取一个变量的地址*:在定义一个指针变量时,起到标识作用,标识定义的是一个指针变量。除此之外其他地方都表示获取一个指针变量保存的地址里面的内容。#include <stdio.h> int main(int argc, char *argv[]) { //定义一个普通变量 int a = 100; //定义一个指针变量 int *p; //给指针变量赋值 //将a的地址保存在p中 p = &a; printf("a = %d %d\n", a, *p); printf("&a = %p %p\n", &a, p); return 0; }
执行结果扩展:如果在一行中定义多个指针变量, 每个指针变量前面都需要加*来修饰。int *p,*q; //定义了两个整型的指针变量p和qint * p,q; //定义了一个整型指针变量p,和整型的变量q -
指针大小在32位系统下,所有类型的指针都是4个字节。因为不管地址内的空间多大,但是地址编号的长度是一样的,所以在32位操作系统中,地址都是四个字节。
#include <stdio.h> int main(int argc, char *argv[]) { char *a; short *b; int *c; long *d; float *e; double *f; printf("sizeof(a) = %d\n", sizeof(a)); printf("sizeof(b) = %d\n", sizeof(b)); printf("sizeof(c) = %d\n", sizeof(c)); printf("sizeof(d) = %d\n", sizeof(d)); printf("sizeof(e) = %d\n", sizeof(e)); printf("sizeof(f) = %d\n", sizeof(f)); return 0; }
执行结果