您的位置:首页 > 编程语言 > C语言/C++

C语言学习--关于指针

2017-01-19 15:55 330 查看
指针属于地址类型的变量,用以存放地址数据。

通常需要读出地址内存放的数据,需要访问空间:①通过访问空间名字 ; ②访问空间地址 ;

通常访问空间名字——给该空间一个名字,该名字属于指针变量,必然为地址类型,决定了所取的数据也是地址类型。通过“*”+“地址类型”访问该地址空间。

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:存放着对象的地址——> *对象地址——>访问对象的空间(通过地址访问地址对应的空间)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 指针