C++常量指针与指针常量_数组指针与指针数组_函数指针与指针函数

合集下载

c语言知识点大纲

c语言知识点大纲

c语言知识点大纲以下是C语言的知识点大纲,适用于初学者和中级水平的学习者:基础概念1.数据类型:整型、浮点型、字符型等2.变量和常量:声明、定义、初始化3.运算符:算术、关系、逻辑、赋值等4.控制流:条件语句(if-else)、循环语句(for、while、do-while)5.函数:声明、定义、调用、参数传递、递归6.数组:声明、初始化、访问、多维数组、数组与指针关系7.指针:地址、指针变量、指针运算、指针和数组、指针和函数8.字符串:字符数组、字符串处理函数、字符串常用操作9.结构体:定义、访问结构成员、结构体数组、结构体指针高级概念10.内存管理:动态内存分配((malloc、calloc、realloc、free)、内存泄漏和内存错误11.文件操作:文件读写、文件指针、文件操作函数12.预处理器:宏定义、条件编译、头文件13.位运算:位操作、位掩码、位运算符14.函数指针:指向函数的指针、回调函数高级主题15.数据结构:链表、栈、队列、树、图等16.算法:排序算法((冒泡排序、快速排序等)、搜索算法((线性搜索、二分搜索等)17.指针与内存:内存布局、内存对齐、指针算术18.多线程编程:线程、同步与互斥、线程安全性19.网络编程:Socket编程、TCP/IP、HTTP协议20.C标准库函数:常用函数库((stdio.h、stdlib.h、string.h(等)实践和应用21.项目开发:使用C语言构建小型项目或工具22.调试和优化:学习调试技巧、代码优化技巧以上列举的知识点可以帮助你建立起对C语言的基础认识并逐渐深入。

实践是掌握编程语言的关键,因此建议在学习过程中不断地练习并尝试编写各种类型的程序,以加深对C语言的理解和掌握。

全的C语言指针详解PPT课件

全的C语言指针详解PPT课件

在函数中使用指针参数
03
使用指针参数来访问和修改指针所指向的内容,需要使用“-
>”或“*”运算符。
05
指针的高级应用
指向指针的指针(二级指针)
定义与声明
二级指针是用来存储另一个指 针的地址的指针。在声明时, 需要使用`*`操作符来声明二级
指针。
初始化与使用
通过使用`&`操作符获取一个指 针的地址,并将该地址存储在 二级指针中。然后,可以通过 二级指针来访问和操作原始指
当使用malloc或calloc等函 数动态分配内存后,如果 不再需要该内存,必须使 用free函数释放它。否则, 指针将指向一个无效的内 存地址。
当一个指针在函数中定义 ,但该函数返回后仍然存 在并继续指向无效的内存 地址时,就会产生野指针 。
避免指针越界访问
总结词:指针越界访问是指试图访问数 组之外的内存,这是不安全的,可能会 导致程序崩溃或产生不可预测的结果。
指针与内存分配
通过指针来访问和操作动态分配的内存空间。指针可以 存储动态分配的内存地址,并用于读取和写入该地址中 的数据。
指向结构体的指针
01
定义与声明
指向结构体的指针是指向结构体类型的指针。在声明时,需要使用结
构体类型的名称来声明指向结构体的指针。
02 03
初始化与使用
通过使用`&`操作符获取结构体的地址,并将该地址存储在指向结构 体的指针中。然后,可以通过该指针来访问和操作结构体中的成员变 量。
```
பைடு நூலகம்
指向数组元素的指针
• 指向数组元素的指针是指向数组中某个具体元素的指针。通过将指针指向数组中的某个元素,可以访问该 元素的值。
• 指向数组元素的指针可以通过定义一个指向具体元素的指针来实现。例如,定义一个指向数组中第三个元 素的指针,可以使用以下代码

理解C语言(一)数组、函数与指针

理解C语言(一)数组、函数与指针

理解C语⾔(⼀)数组、函数与指针1 指针⼀般地,计算机内存的每个位置都由⼀个地址标识,在C语⾔中我们⽤指针表⽰内存地址。

指针变量的值实际上就是内存地址,⽽指针变量所指向的内容则是该内存地址存储的内容,这是通过解引⽤指针获得。

声明⼀个指针变量并不会⾃动分配任何内存。

在对指针进⾏间接访问前,指针必须初始化: 要么指向它现有的内存,要么给它分配动态内存。

对未初始化的指针变量执⾏解引⽤操作是⾮法的,⽽且这种错误常常难以检测,其结果往往是⼀个不相关的值被修改,并且这种错误很难调试,因⽽我们需要明确强调: 未初始化的指针是⽆效的,直到该指针赋值后,才可使⽤它。

 int *a;*a=12; //只是声明了变量a,但从未对它初始化,因⽽我们没办法预测值12将存储在什么地⽅int *d=0; //这是可以的,0可以视作为零值int b=12;int *c=&b;另外C标准定义了NULL指针,它作为⼀个特殊的指针常量,表⽰不指向任何位置,因⽽对⼀个NULL指针进⾏解引⽤操作同样也是⾮法的。

因⽽在对指针进⾏解引⽤操作的所有情形前,如常规赋值、指针作为函数的参数,⾸先必须检查指针的合法性- ⾮NULL指针。

解引⽤NULL指针操作的后果因编译器⽽异,两个常见的后果分别是返回置0的值及终⽌程序。

总结下来,不论你的机器对解引⽤NULL指针这种⾏为作何反应,对所有的指针变量进⾏显式的初始化是种好做法。

如果知道指针被初始化为什么地址,就该把它初始化为该地址,否则初始化为NULL在所有指针解引⽤操作前都要对其进⾏合法性检查,判断是否为NULL指针,这是⼀种良好安全的编程风格1.1 指针运算基础在指针值上可以进⾏有限的算术运算和关系运算。

合法的运算具体包括以下⼏种: 指针与整数的加减(包括指针的⾃增和⾃减)、同类型指针间的⽐较、同类型的指针相减。

例如⼀个指针加上或减去⼀个整型值,⽐较两指针是否相等或不相等,但是这两种运算只有作⽤于同⼀个数组中才可以预测。

C语言考试复习要点

C语言考试复习要点

C语言考试复习要点C语言是一种广泛应用于计算机编程领域的高级编程语言。

对于需要参加C语言考试的学生来说,了解重点复习的内容非常重要。

本文将讨论C语言考试的复习要点,帮助读者更好地准备考试。

一、基础概念与语法1. 数据类型:包括整型、浮点型、字符型等,了解它们的范围、存储空间和使用方法。

2. 变量与常量:掌握变量的声明、赋值和使用,了解常量的概念以及如何定义和使用。

3. 运算符:包括算术运算符、关系运算符、逻辑运算符等,了解它们的优先级和使用规则。

4. 控制语句:包括条件语句(if-else语句)、循环语句(for循环、while循环)和跳转语句(break语句、continue语句、return语句)等。

掌握它们的语法和用法,能够编写简单的流程控制程序。

二、数组与字符串1. 数组:了解数组的定义和使用,包括一维数组和多维数组,掌握数组的初始化、访问和遍历等操作。

2. 字符串:了解字符串的概念和字符数组的使用,能够实现字符串的输入、输出以及常见的字符串操作(比如拼接、复制、比较等)。

三、函数与指针1. 函数:了解函数的定义和使用,包括函数的声明、调用和返回值等。

掌握函数的参数传递方式(值传递、地址传递),能够编写简单的函数以及函数调用的程序。

2. 指针:理解指针的概念和作用,了解指针与数组、指针与函数的关系。

掌握指针的声明和使用,能够编写简单的指针操作程序。

四、文件操作1. 文件读写:了解文件的打开和关闭操作,能够进行文件的读取和写入。

掌握文件读写的基本函数(如fopen、fclose、fread、fwrite等)的使用。

2. 文件指针:了解文件指针的概念和作用,包括文件位置指针和错误指示指针。

能够使用文件指针进行文件的读写操作。

五、综合应用1. 综合编程:能够根据题目要求,运用C语言的基础知识和技巧,编写可以实现特定功能的程序。

2. 调试技巧:掌握常见的程序调试技巧,能够根据错误提示信息进行程序错误的定位和修复。

c语言指针教学中的知识点分析与总结

c语言指针教学中的知识点分析与总结

c语言指针教学中的知识点分析与总结c语言指针教学中的知识点分析与总结本文对c语言指针的教学进行了探讨和总结。

要想真正的掌握c 语言的指针,首先必须要对它有全面深刻的认识。

因为它是c语言的基础,只有将指针的知识学好,才能够更好地学习后续的课程。

下面小编给大家介绍一下关于c语言指针的知识。

一、 c语言中指针的定义指针是一种特殊的数据类型,也称为引用类型。

所谓指针就是指向一个地址的变量,例如: int a[10];二、变量指针及指针变量1.1 c语言中的变量。

变量是存储在计算机中的二进制数值,当我们需要使用时,必须创建一个变量并赋予它相应的值,然后将变量的地址传递给外部的一个或多个对象,这样外部对象通过访问内部变量来使用其中存储的信息,而且可以保证外部对象不会越界。

1.2指针变量是变量的一种特殊形式,指针变量在内存中占有一块区域,可以指向一个地址,这个地址的值是这个变量所代表的值,这样方便变量间的传递。

例如: char *a[10];2.1指针操作符2.2指针数组,它的作用和一维数组相同,即具有一维数组的特点,也具有二维数组的特点,三者最明显的区别就是二维数组中元素个数是固定的,而一维数组中元素个数是可变的。

2.3指针的运算规则。

在指针变量的操作中,要遵循以下运算规则:原地址→指针地址。

例如: char * a[10]; 2.4 c语言中的const指针常量是一种特殊的指针常量, const不是一种变量的标准类型,它专门用于指向一个const指针。

2.3指针的运算规则。

在指针变量的操作中,要遵循以下运算规则:原地址→指针地址。

例如: char *a[10];2.4指针的定义与使用:所谓指针就是指向一个地址的变量,例如: int a[10]; 2.4指针的定义与使用: pointer, pointer-pointer,and-and-and。

所以,当我们在一个字符串中出现pointer,pointer-pointer, and-and-and的时候,就表示它指向一个地址。

c语言中的指针详解

c语言中的指针详解

c语言中的指针详解在C语言中,指针是一种特殊的变量类型,它存储了一个变量的内存地址。

通过指针,我们可以间接访问和修改内存中的数据,这对于一些需要动态分配内存的操作非常有用。

以下是关于C语言指针的一些详细解释:1. 定义指针:使用"*"符号来定义指针变量。

例如,int* ptr; 定义了一个指向整型变量的指针 ptr。

2. 取址操作符(&):取地址操作符(&)用于获取变量的内存地址。

例如,&a 返回变量 a 的地址。

3. 解引用操作符(*):解引用操作符(*)用于访问指针所指向的变量的值。

例如,*ptr 返回指针 ptr 所指向的整型变量的值。

4. 动态内存分配:可以使用相关的库函数(如malloc和calloc)在运行时动态分配内存。

分配的内存可以通过指针来访问和使用,并且在使用完后应该使用free函数将其释放。

5. 空指针:空指针是一个特殊的指针值,表示指针不指向任何有效的内存地址。

可以将指针初始化为NULL来表示空指针。

6. 指针和数组:指针和数组在C语言中有密切的关系。

可以通过指针来访问数组元素,并且可以使用指针进行指针算术运算来遍历数组。

7. 传递指针给函数:可以将指针作为函数参数传递,以便在函数内部修改实际参数的值。

这种传递方式可以避免拷贝大量的数据,提高程序的效率。

8. 指针和字符串:字符串在C语言中实际上是以字符数组的形式表示的。

可以使用指针来访问和操作字符串。

需要注意的是,指针在使用时需要小心,因为不正确的操作可能导致程序崩溃或产生不可预料的结果。

对于初学者来说,理解指针的概念和使用方法可能需要一些时间和练习。

C语言的简答题包含解答共60道题

C语言的简答题包含解答共60道题

C语言的简答题包含解答共60道题1. 什么是C语言?◆C语言是一种通用的编程语言,由Dennis Ritchie于1972年开发。

它被广泛用于系统编程、应用程序开发和嵌入式系统等领域。

2. 什么是C语言的注释?◆在C语言中,注释用于添加对代码的解释和说明。

有两种类型的注释:单行注释(//)和多行注释(/* */)。

3. 什么是变量?如何声明变量?◆变量是用于存储数据的标识符。

在C语言中,变量的声明包括变量类型和名称,例如:`int myVariable;`。

4. 什么是数据类型?举例说明几种C语言的数据类型。

◆数据类型定义了变量可以存储的数据类型。

一些C语言的数据类型包括int、float、char、double等。

5. 什么是C语言的关键字?◆关键字是C语言中具有特殊含义的保留字,不能用作变量名。

例如,`if`、`while`、`for`等是关键字。

6. 什么是运算符?举例说明一些C语言的运算符。

◆运算符用于执行各种数学和逻辑操作。

例如,+、-、*、/是算术运算符,==、!=、>、<是比较运算符。

7. 什么是条件语句?举例说明一个C语言的条件语句。

◆条件语句用于根据条件执行不同的代码块。

例如,`if`语句用于在条件满足时执行特定的代码块。

8. 什么是循环语句?举例说明一个C语言的循环语句。

◆循环语句用于多次执行相同的代码块。

例如,`for`循环用于按照特定条件重复执行代码块。

9. 什么是函数?如何声明和定义一个函数?◆函数是可重复使用的代码块,用于执行特定任务。

函数的声明包括函数返回类型、名称和参数列表,例如:`int add(int a, int b);`。

10. 什么是指针?如何声明和使用指针?◆指针是用于存储变量地址的变量。

指针的声明包括指针类型和名称,例如:`int *ptr;`。

要使用指针,可以使用`&`运算符获取变量的地址,使用`*`运算符访问指针指向的值。

11. 什么是C语言中的数组?◆数组是一种用于存储相同数据类型的元素集合的数据结构。

《C语言基础教案》

《C语言基础教案》

《C语言基础教案》word版教案章节:一、C语言概述1. C语言的历史和发展2. C语言的特点和应用范围3. C语言的编译过程二、C语言基础语法1. 数据类型整型、浮点型、字符型变量和常量的声明和使用2. 运算符和表达式算术运算符关系运算符逻辑运算符赋值运算符条件运算符逗号运算符3. 控制语句条件语句循环语句跳转语句三、函数和数组1. 函数的定义和声明2. 函数的参数传递3. 函数的返回值4. 数组的声明和使用5. 字符串的操作四、指针和引用1. 指针的概念和声明2. 指针的运算3. 指针与数组4. 指针与函数5. 指针与动态内存分配五、结构体和文件操作1. 结构体的定义和声明2. 结构体的使用3. 文件的概念和打开4. 文件的读写操作5. 文件的关闭和错误处理六、顺序结构与分支结构1. 顺序结构的实现2. 分支结构的概念与实现3. 条件语句的嵌套4. 逻辑表达式与布尔类型七、循环结构1. 循环结构的概念与类型2. for循环的实现与应用3. while循环的实现与应用4. do-while循环的实现与应用5. 循环控制语句:break与continue八、数组与字符串1. 一维数组的声明、初始化与操作2. 二维数组的概念与操作3. 字符串的基本操作4. 字符串数组的应用5. 排序算法与数组的应用九、指针与内存管理1. 指针的基本概念与运算2. 指针与数组的关系3. 指针与函数的调用4. 指针与动态内存分配5. 内存管理:malloc、calloc、realloc与free十、结构体与联合体1. 结构体的概念与使用2. 结构体数组的操作3. 结构体指针的应用4. 联合体的概念与使用5. 枚举类型的声明与使用十一、函数的高级应用1. 递归函数的概念与实现2. 函数指针的应用3. 函数调用的方式与参数传递4. 全局变量与局部变量的作用域5. 静态局部变量的使用十二、指针与数组1. 指针与数组的关系2. 指针数组的概念与使用3. 数组指针的概念与使用4. 指针函数的概念与使用5. 函数指针数组的应用十三、文件操作1. 文件的概念与文件指针2. 文件的打开与关闭3. 文件的读写操作4. 文件的定位与操作5. 文件权限与错误处理十四、标准库函数1. 标准输入输出函数2. 字符串处理函数3. 数学函数4. 日期与时间函数5. 随机数函数十五、C语言编程实例1. 计算器程序的设计与实现2. 文本编辑器的基本功能实现3. 排序算法的实现与应用4. 树状数组与动态规划算法5. 简单的游戏设计与实现重点和难点解析本文档为《C语言基础教案》的全篇内容,主要涵盖了C语言的概述、基础语法、函数和数组、指针和引用、结构体和文件操作等基础知识,以及高级应用、函数的高级应用、文件操作、标准库函数和编程实例等进阶内容。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常量指针与指针常量一) 常量指针。

常量是形容词,指针是名词,以指针为中心的一个偏正结构短语。

这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针(变量)。

指针指向的对象是常量,那么这个对象不能被更改。

在C/C++中,常量指针是这样声明的:1)constint *p;2)intconst *p;常量指针的使用要注意,指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改,也就是说常量指针可以被赋值为变量的地址,之所以叫做常量指针,是限制了通过这个指针修改变量的值。

例如:int a = 5;constint b = 8;constint *c = &a; // 这是合法的,非法的是对c的使用*c = 6; // 非法,但可以这样修改c指向的对象的值:a = 6;constint *d = &b; // b是常量,d可以指向b,d被赋值为b的地址是合法的细心的朋友在使用字符串处理函数的时候,应该会注意到这些函数的声明。

它们的参数一般声明为常量指针。

例如,字符串比较函数的声明是这样的:intstrcmp(const char *str1, const char *str2);可是这个函数却可以接收非常量字符串。

例如这段程序:char *str1, *str2;str1 = "abcde1234";str2 = "bcde";if(strcmp(str1, str2) == 0){printf("str1 equals str2.");}str1和str2的内容显然是可以更改的,例如可以使用“str1[0] = x;”这样的语句把str1的内容由“abcde1234”变为“xbcde1234”。

因为函数的参数声明用了常量指针的形式,就保证了在函数内部,那个常量不被更改。

也就是说,对str1和str2的内容更改的操作在函数内部是不被允许的。

(就目前的应用来看,我觉得设置常量指针就是为函数参数声明准备的,不然还真不知道用在什么地方呢,呵呵!)虽然常量指针指向的对象不能变化,可是因为常量指针是一个变量,因此,常量指针可以不被赋初始值,且可以被重新赋值。

例如:constint a = 12;constint b = 15;constint *c = &a; // 为了简化代码,很多人习惯赋初始值constint *d;d = &a; // 这样当然是可以的c = &b; // 虽然c已经被赋予初始值,可是仍然可以指向另一个变量特点是,const的位置在指针声明运算符*的左侧。

只要const位于*的左侧,无论它在类型名的左边或右边,都声明了一个指向常量的指针,叫做常量指针。

可以这么想,*左侧是常量,指针指向的对象是常量。

二) 指针常量指针是形容词,常量是名词。

这回是以常量为中心的一个偏正结构短语。

那么,指针常量的本质是一个常量,而用指针修饰它,那么说明这个常量的值应该是一个指针。

指针常量的值是指针,这个值因为是常量,所以不能被赋值。

在C/C++中,指针常量这样声明:int a;int *const b = &a; //const放在指针声明操作符的右侧只要const位于指针声明操作符右侧,就表明声明的对象是一个常量,且它的内容是一个指针,也就是一个地址。

上面的声明可以这么读,声明了一个常量b,它的值是变量a的地址(变量a的地址,不就是指向变量a的指针吗)。

因为指针常量是一个常量,在声明的时候一定要给它赋初始值。

一旦赋值,以后这个常量再也不能指向别的地址。

虽然指针常量的值不能变,可是它指向的对象是可变的,因为我们并没有限制它指向的对象是常量。

因此,有这么段程序:char *a = "abcde1234";char *b = "bcde";char *const c = &a;下面的操作是可以的。

a[0] = 'x'; // 我们并没有限制a为常量指针(指向常量的指针)或者*c[0] = 'x' // 与上面的操作一致三)指向常量的指针常量顾名思议,指向常量的指针常量就是一个常量,且它指向的对象也是一个常量。

因为是一个指针常量,那么它指向的对象当然是一个指针对象,而它又指向常量,说明它指向的对象不能变化。

在C/C++中,这么声明:constint a = 25;constint * const b = &a;看,指针声明操作符左边有一个const,说明声明的是一个指向常量的指针。

再看,指针声明操作符右边有一个const,说明声明的是一个指针常量。

前后都锁死了,那么指向的对象不能变,指针常量本身也不能变。

细细体味,相信能得其道,下面就不赘述了。

用一个例子作为总结。

虽然字符指针与其它指针的本质是一样的,可是因为字符指针常用来表示字符串,常不好理解。

下面就用字符指针来举例。

char *a = "abcde1234";const char *b = "bcde"; // b是指向常量字符串的指针变量char *const c = &a; // c是指向字符指针变量的常量const char *const d = &b; // d是指向字符常量的指针常量问题来了。

1)问:因为a是变量,a可以赋值为其它值,如"12345abc"。

那么c指向a,当a变化了,c指向什么呢?答:仍然指向"abcde1234"。

虽然a可以指向别的字符串,可是c仍然指向"abcde1234",也就是a开始指向的对象。

2)问:a是变量,可以改变a的内容。

那么当执行了“a[0] = 'x';”后,c会怎样呢?答:c当然还指向a初始指向的字符。

不过,这个字符已经变成了'x'。

3)问:b是指向常量的指针变量,当b指向别的字符串,d怎么样?答:d仍然指向b初始的字符串。

4)问:b可以变化,b指向的字符不能变化,也就是说b[0]不能被重新赋值,可是b[1]可以被重新赋值吗?答:原则上b指向的字符是常量,并没有限制下一个字符,应该可以被赋值。

可是因为你使用字符串进行了初始赋值,而且编译器是静态编译的,C/C++程序就把b当作字符串指针来处理了,因此,当对下一个字符进行赋值时,编译不能通过。

口诀:const(*号)左边放,我是指针变量指向常量;const(*号)右边放,我是指针常量指向变量;const(*号)两边放,我是指针常量指向常量;指针变量能改指向,指针常量不能转向!要是全都变成常量,锁死了,我不能转向,你也甭想变样!一)数组指针:a pointer to an array,即指向数组的指针int (*a)[4] 数组指针表示:指向数组a的指针元素表示:(*a)[i]1.数组名本身就是一个指针,指向数组的首地址。

注意这是声明定长数组时,其数组名指向的数组首地址是常量。

而声明数组并使某个指针指向其值指向某个数组的地址(不一定是首地址),指针取值可以改变。

2.是指向数组的一个指针,如int (*p)[10] 表示一个指向10个int元素的数组的一个针。

二)指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针int* a[4] 指针数组表示:数组a中的元素都为int型指针元素表示:*a[i] *(a[i])是一样的,因为[]优先级高于*一个数组,若其元素均为指针类型数据,称为指针数组。

也就是说,指针数组中每一个元素都相当于一个指针变量。

其详细形式应该如下:*a[0], ...*a[n]. 每一个数组里面存储的是其指向的地址;一维指针数组的定义形式为:类型名*数组名[数组长度]例如:int *p[4],由于[]比*优先级更高,因此p先与[4]结合,形成p[4]的形式,这显然是数组形式。

然后再与p前面的*结合,*表示此数组是指针类型的,每个数组元素都指向一个整型变量。

三)demo:关键就在于*和[]优先级上的问题,下面通过一个例子来分析一下。

声明char *ponitArray[] = {"stately" , "plump" , "buck" , "mulligan"}; 由定义知这是一个指针数组,那么sizeof(pointArray)=?呢,因为pointArray是一个存放指针的数组,而存放指针其实存放的是地址,一般用4个字节表示,而数组大小为4,故而结果就为4*4 = 16.char (*arrayPoint)[4];char t[4]="123";arrayPoint=&t;cout<<"*A = "<<*arrayPoint<<"\tA = "<<arrayPoint<<endl;上面几行代码输出结果应该是什么呢?,首先arrayPoint是一个指针,指向一个存放4个字符的C风格字符串,从这里我们可以知道arrayPoint其实是一个32位(一般)的整数,所有下一步我们要将一个长度为4的字符串地址赋给该指针,即arrayPoint=&t;,故可知输出结果就为“123”和字符串t的地址。

【函数指针】在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。

可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。

1.函数指针定义函数类型(*指针变量名)(形参列表);“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。

例如:int (*f)(int x);double (*ptr)(double x);在定义函数指针时请注意:函数指针和它指向的函数的参数个数和类型都应该是—致的;函数指针的类型和函数的返回值类型也必须是一致的。

2.函数指针的赋值函数名和数组名一样代表了函数代码的首地址,因此在赋值时,直接将函数指针指向函数名就行了。

例如,intfunc(int x); /* 声明一个函数*/int (*f) (int x); /* 声明一个函数指针*/f=func; /* 将func函数的首地址赋给指针f */赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。

相关文档
最新文档