要了解指针,我们先来了解内存,内存可以分为一个个的内存单元,每个内存单元都有一个编号,称为地址,而指针的概念就是地址,指针变量即是用来存放地址(指针)的变量,创建变量就是要在内存里面申请空间,例如int a=10;就是向内存申请了4个字节去存储10(x86),a的地址是第一个字节的地址即首地址,这里介绍几个符号:& 取地址操作符(&a 取出a的地址) %p以地址的格式来打印。
- #include
- int main()
- {
- int a=10;//向内存申请四个字节,存储10
-
- int *p=&a; //p称为指针变量,把a的地址放到指针变量里去
-
- printf("%p\n",&a);//%p以地址的形式打印,即打印a的地址
-
- *p=20;//*是解引用操作符,即通过指针变量p中存放的地址,找到p所指向的对象,*p就是p所指向的对象
-
- printf("%d\n",a); // 结果是20 *p=a,相当于对a就行赋值
-
- return 0;
- }
每一次运行变量a都会重新创建 所以每一次打印出来的地址是不同的。
指针变量就是用来存放地址的。int *p=&a; 此时p称为指针变量,不是*p。
int *是指针变量的类型 ,前面的int是指针变量p所指向的对象。即a的类型。在指针变量的眼里,只要你把一个数据放在我这,就认为这个数据是地址。
不管什么类型的指针,都是在创建指针变量
指针变量的大小取决于一个地址存放时所需要的空间。
32位机器上的地址,32bit-4byte-所以指针变量的大小是4个字节。
64位机器上的地址,64bit-8byte-所以指针变量的大小是8个字节。