指针属于地址类型的变量,用以存放地址数据。
通常需要读出地址内存放的数据,需要访问空间:①通过访问空间名字 ; ②访问空间地址 ;
通常访问空间名字——给该空间一个名字,该名字属于指针变量,必然为地址类型,决定了所取的数据也是地址类型。通过“*”+“地址类型”访问该地址空间。
1.指针变量名
int * p ;
变量名为p,而非*p;原因是变量名属于标识符,标识符需要合法,因此不能有“*”.
标识符的合法性:要求标识符只有由字母、数字、下划线组成
只要是名称(非关键字),就是标识符,就要合法。
(1)不同类型的指针,不能互相赋值,如———
int a = 10 ;
int* pa = &a ; //定义了pa指针,并指向a
double* pb = pa ; //!!!int*是指向int型变量,double*是指向double型变量,不能互相赋值
(2)“*”(星号)的位置
int* a ; // int与*连着写
int * a ; // int与*之间隔着空格,*与a也隔着空格
int *a ; // *与变量名连着
(3)!!区分:指针定义语句中的“*”(星号)和 按地址访问的“*”(星号)
int a = 10 ;
int b = 11 ;
int* p ; // 定义了一个指针(p是指针变量,属于地址类型,前面加*号是通过“*”+“地址类型”访问地址对应的空间)
p = &a ; // p指向了a (!!!区分:变量a有地址,被所定义的指针p指向了它,但此刻所定义的指针p本身就属于一个变量,它也要有存放本身的地址)
printf("%d\n" , *p ) ; // 取得p处内存的值
p = &b ; // p改变指向,指向了b
printf("%d\n" , *p ) ; // 再取一次p处的内存值
(4)“*”(星号)操作__int不支持星号操作
int addr = 0x1234 ; // 定义普通int型变量
*addr = 0 ; // 出现变异错误!!!只有指针才能支持星号操作!!!
2.指针变量的类型
2.1 指针本质是变量,而且属于地址类型,声明格式:包含“类型”、“变量名”
2.2 int——整形(不能访问空间)、int *——地址类型(允许访问空间)
3.指针对象(目标访问的空间)的类型
空间操作原理:空间的读写操作,依赖空间的类型;要对空间进行操作,必须知道空间的类型
指针主要目的就是访问对象空间;要访问空间,就必须知道空间的类型。因此在使用指针变量
int * p ; 指针变量名是p,类型为int * ,表示变量p中空间存的int * 类型数据。假如p:(代表)存放0x01(int *);* p 则代表 * 0x01(int *),该表达说明这整个整体代表一块空间,空间大小为0x01——0x05范围,属于int型空间——说明通过int * 访问的对象空间类型是int型。
---------------------------------------------------------------------------------------------------------------------------------------------
int * p ;
p——指针变量名:指针变量本身所占用的空间(通过变量名访问空间)
*p——p:存放着对象的地址——> *对象地址——>访问对象的空间(通过地址访问地址对应的空间)