第10章 指针(三)对地址进行分类------指针类型

简介:
我们已经知道,指针就是首地址。 
       在日常生活中,我们认识了一个人A,而后我们用他的电话联系他,当然关系好些,可以留下其地址,以便登门拜访。于是我们用一个本子,记录下电话和地址,这个记录电话地址的本子,就是我们常说的电话本儿,现在我们的手机里面就有电话本,功能强些的电话簿,还有记录地址的功能。通过地址我们就可以找到他们。因此,记录地址是我们日常必需的一个工作。 
       在计算机中,   我们定义了一个变量A,而后我们用变量名A访问它,当然深入编程,也可留下A的首地址,以便登门拜访。于是我们需要记录下A的首地址;C语言中,我们可以使用一个变量B来记录A的首地址的,这里的B是一种特殊的变量,是专门用来存放地址的变量;有关这种地址变量的定义,我们会在后面描述。通过B中的地址,我们就可以找到A了。因此,存储首地址是我们C编程必需的一个工作。 
       
       好,现在,我们首先,对地址簿中,可能的地址,进行分类, 
       日常生活中,我们的地址簿是一个本子,其中人的地址是按照朋友、同学、同事、亲戚、好友等等分类的,而且可以用不同颜色的笔来区别!比如红笔写的地址,代表朋友。黑笔,代表同学。黄笔,代表同事。绿笔,代表亲戚。蓝笔,代表好友。 

       电脑编程中,我们的地址簿中存放的是一些变量或函数的首地址。我们不能用颜色来分类地址,而是按照整型、浮点、字符、数组、函数等等对地址进行分类,分成整型地址、浮点地址、字符地址、数组地址、函数地址等等,也就是说地址是有类型的,这些类型是繁杂的,需要认真加以区别和记忆! 
       1、普通变量首地址的类型: 
           我们已经很熟悉,用int定义的变量,能存放-32768~+32767这个范围内整数,这种变量的首地址是有类型的,类型是int *,这里*的意思就是地址类型。 
           例如:有int a;那么int a的首地址我们简写成&a,于是&a的类型就是int * 

           如果说,int变量和int变量的首地址之间有类型的对应关系的话,
           那么,变量是int类型,相应的,该变量首地址是int *类型,简写为:        
                                      int    ---->>>>   int *
同理:float---->>>>float * 
    char---->>>>char *
      unsigned---->>>>unsigned *
      long---->>>>long *
          ..................... 

       
2、一维数组首地址的类型: 
           int---->>>>int *     float---->>>>float *     char---->>>>char *; 
           例如:int a[10]; 其首地址就是数组名a , 于是a就是int *类型的。 
           而此数组中,任意一个元素的首地址的类型,
也是int *类型的
   
比如a[5]的首地址是&a[5], 也是int *类型的
           
       
3、二维数组首地址的类型: 
           假设有2维数组定义如下: 
              int a[3][4]; 
           那么把int a[3][4],用小括号把数组名括起来变成int (a)[3][4],再把数组名变成*,即int(*)[3][4],接着把表示行数的部分[3]去掉,变成int (*)[4],就是这个2维数组地址的类型。 

                              int a[3][4];          ------>>>>       int (*)[4] 
           一般的,二维int 数组名[数组行数][n]----->>>>int (*)[n],而此二维数组每行必须有n列。 

           于是同理: 
                       二维float 数组名[数组行数][n]----->>>>float (*)[n] 
                       二维char 数组名[数组行数][n]---->>>>char (*)[n] 


       
4、函数首地址的类型: 
           对于函数,假设,有函数int F(void){...},那么,用int (*)(void)作为它的首地址(又称入口地址)的类型。 
           这个类型是如何来的呢?就是把其函数首部 int F(void),用小括号把函数名括起来变成int (F)(void),再把函数名变成*,即int(*)(void),就是该函数入口地址的类型。 
                          int F(void){...}---->>>>int (*)(void) 




       从上面可以看到,地址类型中,都用到一个* 
       我们已经知道,首地址就是指针,因此上述地址类型,就是指针类型。 

       学习指针的第一关就是能熟悉上面这些繁杂的地址类型的写法,这,是必须穿越的第一关哦



本文转自yonghu86 51CTO博客,原文链接:http://blog.51cto.com/yonghu/1321422,如需转载请自行联系原作者

相关文章
|
11月前
链表指针的传参,传值和传地址
本文讨论了链表操作中指针传参的问题,特别是指针的传值与传地址的区别,并提供了修正代码,以确保链表插入操作能正确地修改指针指向的地址。
87 1
链表指针的传参,传值和传地址
|
11月前
|
C++
析构造函数就是为了释放内存,就是在局部指针消失前释放内存,拷贝构造函数就是以构造函数为模块,在堆里面新开一块,同一个变量在堆里面的地址
本文讨论了C++中构造函数和析构函数的作用,特别是它们在管理动态内存分配和释放中的重要性,以及如何正确地实现拷贝构造函数以避免内存泄漏。
124 2
|
11月前
|
C语言 C++
【C语言】指针篇-一篇搞定不同类型指针变量-必读指南(3/5)
【C语言】指针篇-一篇搞定不同类型指针变量-必读指南(3/5)
151 1
|
12月前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
存储 安全 Go
深入理解 Go 语言中的指针类型
【8月更文挑战第31天】
177 0
|
编译器 C++
函数指针和函数对象不是同一类型怎么替换
函数指针和函数对象不是同一类型,为何可替换用作同一函数的参数
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
118 0
|
图形学 Windows
程序技术好文:记录类型指针
程序技术好文:记录类型指针
71 0
|
存储 编译器
指针?地址?内存?
指针?地址?内存?
170 0
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表