搜档网
当前位置:搜档网 › 第 10 章 指针与函数

第 10 章 指针与函数

第10章指针与函数10.1 函数的参数为指针

概念:一般调用函数通过函数名返回一个具体的数,而此处是返回一个地址

定义函数格式:

类型名*函数名(形参表)

{

函数体

return(e);

}

此处的e是一个指针变量或一个对象的地址

例:

int *max(x,y)

在函数名前加一个*

注意:

此函数是返回地址,那么于return之后的e的值要对应

10.3 函数的指针

因为函数也要占内存,所以也存在地址,用函数地址的目的是通过函数指针调用函数

定义格式:

设有一个函数,max(x,y)

int (*p)(类型表);

p=max;将函数nax的地址赋给p

10.4 指针数组和指针的指针

1、指针数组

定义一串存放地址的元素。

int *p[5]; (*p)[5]

其中每个元素均存放地址

例:10.16

2、指针的指针

专门存放指针变量地址的变量

格式:

int x,*p,**pp;

x=90;

p=&x;

pp=&p;

*p的值是90

**pp的值也是90

而p的值是x的地址

*pp的值是p的内容及x的地址

10.5主函数带参数

因为其它函数不能调用主函数,所以主函数代参数必须通过dos调用赋实参(1)、定义主函数代参数:

main(int n,char *c[])

其中:只能是2个形参

第一个是一个整型变量

第二个是一个无大小的字符指针数组

他们的值是通过dos调用得到

(2)、调用的格式

程序名,实参表

实参之间用空格分开。

当调用完后,n的值是实参个数加1

c的值是程序名及个实参名(均当字符处理)

main(int n,char *c[])

{

int a;

for(a=0;a

printf(“a=%d %s\n”,a,c[a]);

}

c语言函数调用指针

c语言函数调用指针 1. 函数指针的定义 函数指针是指向函数的指针变量。在C语言中,函数名本身就是一个指向函数代码的地址,因此我们可以用一个指针变量来存储这个地址,并通过这个指针变量来调用函数。函数指针的格式为: ``` 返回值类型(*指针变量名)(参数列表); ``` 例如,定义一个指向int类型的函数的指针变量: ``` int (*ptr)(int, int); ``` 这里的ptr是一个指向int类型函数的指针变量,它可以指向任何类型是int(int, int)的函数。 函数指针变量在定义时必须进行初始化,可以将函数名直接赋值给函数指针变量: ``` int add(int a, int b) { return a + b; } 这里将add函数的地址赋值给函数指针变量ptr。此时,ptr就可以像add函数一样被调用: 函数指针可以作为参数传递给另一个函数: int result = calculate(add, 1, 2); result = calculate(sub, 1, 2); ```

在这个例子中,calculate函数接受一个函数指针作为第一个参数,然后调用这个函 数指针。 函数指针也可以作为返回值返回: int (*get_operator(char op))(int, int) { if (op == '+') { return add; } else if (op == '-') { return sub; } else { return NULL; } } 在这个例子中,get_operator函数接受一个字符参数,返回一个指向int(int, int) 函数的指针。根据传入的字符,它会返回add函数或sub函数的地址。返回的函数指针可 以像add函数和sub函数一样被调用。 函数指针还可以用来实现回调函数。回调函数是指在程序运行期间,一些情况发生时,系统调用预定义的函数来进行处理,这个预定义的函数就是回调函数。 例如,在Windows编程中,当窗口关闭时,操作系统会调用预定义的回调函数,应用 程序可以利用这个回调函数来进行清理工作等操作。在C语言中,回调函数可以通过函数 指针来实现。 ``` typedef void (*callback)(void); void register_callback(callback func) { // 注册回调函数 ... } 5. 总结

《C语言程序设计》第十章文件

《C语言程序设计》第十章文件 C语言文件操作是指对文件进行输入和输出操作以及对文件进行读写管理的过程。在C语言中,通过文件操作我们可以实现对磁盘上的文件进行读写操作,以及对文件进行打开、关闭、创建和删除等管理操作。 文件操作在C语言中是通过标准库中的文件操作函数来实现的,这些函数包括fopen、fclose、fread、fwrite、fgets、fputs、fseek等。这些函数提供了一系列的接口来实现对文件的读写操作。 首先,我们需要通过fopen函数来打开文件。fopen函数的原型为:FILE *fopen(const char *filename, const char *mode)。其中filename是要打开的文件名,mode是打开方式。mode参数有以下几种:-"r":只读方式打开,文件不存在则打开失败。 -"w":写入方式打开,文件不存在则创建,若文件存在则清空原有内容。 -"a":追加方式打开,文件不存在则创建,若文件存在则在文件末尾追加内容。 - "rb"、"wb"、"ab":二进制方式读写文件,同上。 fopen函数返回一个指向FILE结构类型的指针,即文件指针,用于后续对文件的操作。 打开文件后,我们可以使用fread函数和fwrite函数来进行文件的读取和写入操作。fread函数的原型为:size_t fread(void *ptr, size_t size, size_t count, FILE *stream);fwrite函数的原型为:size_t fwrite(const void *ptr, size_t size, size_t count, FILE

C语言指针知识点总结

指 针 ★指针的重要性 表示一些复杂的数据结构 快速传递数据 使函数返回一个以上的值 能直接访问硬件 能方便处理字符串 是理解面向对象语言中引用的基础 总结:指针是C 语言的灵魂 ★指针的定义 ☆地址 内存单元的编号 从零开始的非负整数 范围:4G ☆指针 1.指针就是地址,地址就是指针 2.指针变量是存放地址的变量 3.指针和指针变量是两个不同的概念 4.叙述时通常把指针变量简称为指针,实际它们含义不一样 5.指针的本质就是一个操作受限的非负整数 ★指针的分类 ☆基本类型指针(重要) #include int main(void) Int f(int i,int j) { return 100; // return 88;error } Int main (void) { Int a=3,b=5; # include Void g(int*p,int*q) { *p=1; *q=2; } Int main(void) { Int a=3,b=5;

{ int *p; //p是变量的名字,int*表示p变量存放的是int类型变量的地址 Int*p;不表示定义了一个名字叫做*p的变量 Int*p;应该理解为:p是变量名,p变量的数据类型是int*类型 所谓int*类型,实际就是存放int变量地址的类型 int i=3; char ch=’A’ p=&i; //OK 1.p保存了i的地址,因此p指向i 2.p不是i,i也不是p,修改p的值不影响i的值,修改i的值也不影响p的值 3.如果一个指针变量指向了某个普通变量,则*指针变量完全等同于普通变量 例:若p指向i,则*p=i (*p和i 可互相替换) p=&ch;//error //p=i; //error,因为类型不一致,p只能存放int类型变量的地址,不能存放int类型变量//P=55;//error,原因同上 return 0; } △附注: ?*的含义: 1.乘法 2.定义指针变量 Int*p; //定义了一个名字叫做p的变量,int*表示p只能存放int变量的地址 3.指针运算符 该运算符放在已经定义好的指针变量的前面 如果p是一个已经定义好的指针变量

C++指针函数习题

C++指针函数习题 一、选择题 1.以下程序的运行结果是()。 sub(int x, int y, int *z) { *z=y-x; } void main() { int a,b; sub(10,5,&a); sub(7,a,&b); cout<

#include #include int main() { char * s1="AbDeG"; char * s2="Abdeg"; s1+=2; s2+=2; cout<

第十章 指针(含答案)

第十章指针 一、选择题 1.以下程序的运行结果是【C】。 sub(int x,int y,int *z) {*z=y-x ;} main() { int a, b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf(”%4d,%4d,%4d\n”,a,b,c); } A. 5,2,3 B. -5,-12,-7 C.-5,-12,-17 D. 5,-2,-7 2.若已定义 char s[10]; 则在下面表达式中不表示s[1]的地址的是【 B 】 A)s+1 B)s++ C)&s[0]+1 D)&s[1] 3.下列程序能对两个整型变量的值进行交换。以下正确的说法是【 D】。 main() { int a=10,b=20; printf("(1)a=%d,b=%d\n",a,b); swap(&a,&b); printf(“(2)a=%d,b=%d\n”a,b); } swap(int p, int q) { int t; t=p;p=q;q=t;} A. 该程序完全正确 B. 该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可 C. 该程序有错,只要将swap()函数中的形参p和q以及t均定义为指 针(执行语句不变)即可 D. 以上说法都不正确 4.有四组对指针变量进行操作的语句,以下判断正确的选项是【】。 (1)int *p,*q; q=p; int a,*p,*q;p=q=&a; (2)int a,*p,*q; q=&a; p=*q; int a=20, *p; *p=a; (3)int a=b=0,* p; p=&a; b=* p; int a=20,*p,*q=&a; *p=*q; (4)int a=20,*p,*q=&a; p=q; int p, *q; q=&p; A.正确:(1);不正确:(2),(3),(4) B.正确:(l),(4);不正确:(2),(3) C.正确:(3);不正确:(1),(2),(4) D.以上结论都不正确 5.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是【】。

函数与指针编程题

1.编一程序,将字符串computer赋给一个字符数组,然后从第一个字母开始间隔地输出该串。请用指针完成。 答案:#include "stdio.h" main() { static char x[]="computer": char *p; for(p=x;p void main() { char a[100],*p; int n=0; p=a; gets(p); for(;*p!='\0';p++) { n++; } printf("%d",n); } 3.下面findmax函数将计算数组中的最大元素及其下标值和地址值,请编写*findmax()函数。并将程序调试运行 #include *findmax(int *s,int t,int *k) { } main() { int a[10]={12,23,34,45,56,67,78,89,11,22},k,*add; add=findmax(a,10,&k); printf("%d,%d,%o\n",a[k],k,add); } 答案:#include int *findmax(int *s,int t,int *k) { int max; max=s[0]; for(int i=0;i

*k=i; } } return k; } void main() { int a[10]={12,23,34,45,56,67,78,89,11,22},k,*add; add=findmax(a,10,&k); printf("%d,%d,%o\n",a[k],k,add); } 4. 用指针方法处理。有一字符串,包含n(n>2)个字符。写一函数,将此字符串中从第2个字符开始的全部字符复制成为另一个字符串。 5. 用指针方法处理。有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。 #include #include int main() { int m,len; char str1[100],*p,*q; p=str1; q=p; gets(p); len=strlen(p); printf("input m(m int search(int a[],int n,int x) { int i; for(i=0;i<5;i++)

第十章 指针

第十章指针 本章重点: 指针变量和指针运算符。 指针用作函数参数。 指针与数组。 10.1指针的基本概念 一、地址 在计算机中,把内存区划分为一个一个的存储单元,每个单元为一个字节(8位),它们都有一个编号,这个编号就是内存地址。如下图所示: 注意:1、程序中定义的每个数据在编译后都占有各自的内存区。 2、数据所占有的存储单元个数是由其类型决定的。 3、首地址:第1个单元的地址, 4、表示地址的数与整数的区别: 5、系统通过变量名对内存单元进行访问 2.数据在内存中的存储 整型变量---分配2个字节单元 实型变量—分配4个字节单元 字符变量—分配1个字节单元

2.内存单元的地址与内存单元的内容。 printf(“%d”,i); scanf(“%d”,&i); 的操作过程。 3.对变量值的访问方式 (1)直接访问:按变量地址存取变量值的方式。 (2)间接访问方式:将变量的地址存放在另一个变量当中,通过对另一变量来访问变量。 4.指针:就是变量的地址。 指针变量:用于存放变量地址的变量。 10.2 指针变量和指针运算符 一.指针变量的定义 1.格式:类型名*指针变量名; 2、举例 int *p1; char *s1, *s2; float *a1, *a2, f; 3、说明 a. 类型名:指针变量所指向的变量类型。 b. “*” 是定义指针变量的标志,不可丢掉。 c. 指针变量定义后,其值是不确定的。 4、赋值:可以进行初始化,也可以使用赋值语句 (1)、初始化:int a, *s=&a;

(2)、赋值语句 int a, *s; s=&a; 3)、注意:只能用同类型变量的地址进行赋值! 如定义:int *s; float f; 则s=&f;是非法的。 二. 指针变量的引用 1、两个运算符:& 与* &:取地址,注意与作位运算符时的不同(双目) *:取内容,注意与作乘运算符时的不同(双目) 2、说明 a. &既可作用于一般变量,也可作用于指针变量 b. * 只能作用于指针变量 c. 定义指针变量时的* 与该处的含义不同 3、指针变量可以进行的操作 (1)赋值:int a, *p1=&a, *p2; p2=p1; 下面的赋值是不合法的: int *ip; ip=100; 假设: int i=200, x; int *ip; ip=&i; x=*ip; 通过指针变量ip间接访问变量i, (2)输出:printf(“%x”,p1); (3)增减:p1++; p2--; p1+=4; (只能和一个整数) p+n 不论指针变量指向何种数据类型, 指针和整数进行加、减运算时, 编译程序总根据所指对象的数据长度对n放大。 (4). 两个指针变量在一定条件下, 可进行 减法运算。设p, q指向同一数组, 则p-q的绝对 值表示p所指对象与q所指对象之间的元素个 数。 例1 #include main( ) { int a1=11, a2=22; int *p1, *p2;

c++指针函数的定义及用法

c++指针函数的定义及用法 C++指针函数是一种特殊类型的函数,它返回一个指向特定类 型的指针的函数。在函数定义中,我们可以使用"*"运算符来 指示该函数返回一个指针值,并在函数体内部使用关键字"return"来返回指针。 指针函数的定义形式如下: ```cpp type* functionName(parameters) { // 函数体 // ... // 使用 "return" 返回指针 return pointer; } ``` 其中`type`是返回指针所指向的类型,`functionName`是函数名,`parameters`是参数列表,`pointer`是指向特定类型的指针。 指针函数的用法有以下几个常见场景: 1. 返回动态分配的内存:指针函数常用于创建和返回在函数内部动态分配的内存。例如,如果我们想要从函数中返回一个包含特定类型数据的数组,我们可以使用指针函数来动态分配内存并返回指向该数组的指针。 ```cpp

int* createArray(int size) { int* arr = new int[size]; // 动态分配内存 // 初始化数组 for (int i = 0; i < size; i++) { arr[i] = i; } return arr; // 返回指针 } int main() { int* ptr = createArray(5); // 调用指针函数 // 使用指针访问数组元素 for (int i = 0; i < 5; i++) { cout << ptr[i] << " "; } delete [] ptr; // 释放内存 return 0; } ``` 2. 返回结构体指针:指针函数也常用于返回指向结构体的指针。这在需要创建和返回复杂数据结构时非常有用。 ```cpp struct Point { int x; int y; };

C语言程序设计(第3版)第10章补充习题及答案

第10章补充习题及答案 习题 10.1 选择题 (1)当已存在一个abc.txt文件时,执行函数fopen("abc.txt","r+")的功能是。 A.打开abc.txt文件,清除原有的内容 B.打开abc.txt文件,只能写入新的内容 C.打开abc.txt文件,只能读取原有内容 D.打开abc.txt文件,可以读取和写入新的内容 (2)若用fopen()函数打开一个已存在的文本文件,保留该文件原有内容,且可以读,可以写。则文件打开模式是。 A."ab+" B."w+" C."a+" D."a" (3)以下不能将文件指针重新移到文件开头位置的函数是。 A.rewind(fp); B.fseek(fp,0,SEEK_SET); C.fseek(fp,-(long)ftell(fp),SEEK_CUR); D.fseek(fp,0,SEEK_END); (4)若用fopen()函数打开一个新二进制文件,该文件可以读也可以写,则文件的打开模式为 B 。 A."ab+" B."wb+" C."rb+" D."a+" (5)fread(buffer,64,2,fp)的功能是。 A.从fp所指的文件中读取64并存入buffer中 B.从fp所指的文件中读取64和2并存入buffer中 C.从fp所指的文件中读取64个字节的数据并存入buffer中 D.从fp所指的文件中读取2个64字节的数据并存入buffer中(6)以下程序的功能是。提示:PRN是打印设备。 #include void main() { FILE * fp; char chStr[]="HELLO"; fp=fopen("PRN","w"); fputs(chStr,fp); fclose(fp); } A.在屏幕显示HELLO B.把HELLO存入PRN文件中 C.在打印机上打印出HELLO D.以上都不对 10.2 填空题 (1)使用fopen("abc","r+")打开文件时,若"abc"文件不存在,则返回。 (2)假设数组dArray声明为double dArray[4]={2.3,45.6,5.7,10.89},则将数值5.7写入文件指针fp所指向的文件的语句是。 (3)fputs("ShenZhen",fp)的功能是。其中,fp为一文件指针。 (4)文件指针fp指向一个打开的文件,则将文件位置指针移离文件开头64个字节处,应使用的函数调用语句是,将文件位置指针移离文件当前位置32个字节处,应使用的函数调用语句是,将文件位置指针移离距末尾文件128个字节处,应使用的函数调用语句是。

指针函数的定义

1.指针函数的定义 顾名思义,指针函数即返回指针的函数。其一般定义形式如下: 类型名*函数名(函数参数表列); 其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“类型名”表示函数返回的指针指向的类型”。 “(函数参数表列)”中的括号为函数调用运算符,在调用语句中,即使函数不带参数,其参数表的一对括号也不能省略。其示例如下: int *pfun(int, int); 由于“*”的优先级低于“()”的优先级,因而pfun首先和后面的“()”结合,也就意味着,pfun是一个函数。即: int *(pfun(int, int)); 接着再和前面的“*”结合,说明这个函数的返回值是一个指针。由于前面还有一个int,也就是说,pfun是一个返回值为整型指针的函数。 我们不妨来再看一看,指针函数与函数指针有什么区别? int (*pfun)(int, int); 通过括号强行将pfun首先与“*”结合,也就意味着,pfun是一个指针,接着与后面的“()”结合,说明该指针指向的是一个函数,然后再与前面的int 结合,也就是说,该函数的返回值是int。由此可见,pfun是一个指向返回值为int的函数的指针。 虽然它们只有一个括号的差别,但是表示的意义却截然不同。函数指针的本身是一个指针,指针指向的是一个函数。指针函数的本身是一个函数,其函数的返回值是一个指针。 2.用函数指针作为函数的返回值 在上面提到的指针函数里面,有这样一类函数,它们也返回指针型数据(地址),但是这个指针不是指向int、char之类的基本类型,而是指向函数。对于初学者,别说写出这样的函数声明,就是看到这样的写法也是一头雾水。比如,下面的语句: int (*ff(int))(int *, int);

c语言基础教程-第十章------文件和读写函数

C语言基础教程文件和文件指针 1.文件 一般说来,文件是有序数据的集合。程序文件是程序代码的有序集合,数据文件是一组数据的有序集合。文件是被存放在外部存储设备中的信息。对文件的处理过程就是面向文件的输入和输出过程。文件的输入过程是从文件中读出信息,文件的输出过程是往文件中写入信息,文件的输入的过程使用读函数,实现文件输出的过程使用写函数。文件的读写函数是实现文件操作的主要函数,本章将用大量篇幅来讲述文件的读写函数。 C语言文件被称为流式文件,其特点是不分记录或块,将文件看成是信息"流"或看成是一个字符流(文本文件),或看成是一个二进制流(二进制文件).文件的存取是以字符(字节)为单位的,读写数据流的开始和结束受程序控制。任何一个文件都是以EOF结束,最简单的文件是只有结束符的空文件。 C语言文件包含有设备文件和磁盘文件,例如,键盘是一种输入信息的文件,显示器屏幕和打印机是输出信息的文件它们都属于设备文件。将内存的信息放到磁盘上保存,需要时再从磁盘上装入内存,这就要使用磁盘文件,磁盘文件是计算机中常用的文件n C语言文件按存放设备分设备文件和磁盘文件;按数据的组织形式分为文本文件(ASCII码文件)和二进制文件。文本文件是按一个字节存放一个字符的ASCII码来存放的;二进制文件是按数据在内存中的存储形式放到磁盘上的。例如,有一个整数10000,在内存中按二进制形式存放,占2个字节,将它放在磁盘上如按文本文件形式存放,占5个字节,每个数位占一个字节。两种存放方式各有利弊。以文本文件形式输出便于对字符进行处理,也便于输出字符,但是占用存储空间较多,并且要花费转换时间。以二进制文件形式输出可节省存储空间和转换时间,但是不能直接输出字符形式。 2.文件指针 文件指针是一种用来指向某个文件的指针。如果说某个文件指针指向某个文件,则是该文件指针指向某个文件存放在内存中的缓冲区的首地址。 每一个被使用的文件都要在内存中开辟一个区域,用来存放的有关信息,包括文件名字、文件状态和文件当前位置等。这些信息被保存在一个结构变量中,该结构变量所对应结构模式被系统定义为F ILE,它被放在,stdio h文件中。有些版式的FILE被定义如下: type struct { int fd; /*文件号*/ int cleft /*缓冲区内剩余的字符*、 int mode; /文件操作模式*/ char * mexic; /*下一个字符位置*/ char * huff; /*文件缓冲区位置*/ }FILE;

指针函数的定义及用法

指针函数的定义及用法 指针函数是C语言中非常重要的概念之一、了解指针函数的定义及使 用方法,对于理解C语言的高级特性和编程技巧非常有帮助。本文将详细 介绍指针函数的概念、定义、使用方法及示例。 一、指针函数的概念:指针函数是指返回值类型为指针类型(即地址 类型)的函数。它可以在函数内部动态地分配内存空间,并通过返回指针 来传递该内存空间的地址。与普通函数不同的是,指针函数的返回值是一 个地址,而不是一个具体的数值或变量。 二、指针函数的定义:指针函数可以被定义为任何类型的数据的指针。例如,int *func(表示一个返回整型指针的函数。在函数内部,我们可以 使用malloc函数来动态分配内存,并将结果指针返回给调用者。 三、指针函数的使用方法: 1.定义指针函数:首先需要确定指针函数要返回的数据类型,然后在 函数声明中使用*符号来表示返回一个指针。 例如,int *func(表示返回一个整型指针的函数。 2. 在函数内部创建动态内存空间:使用malloc函数来为指针函数分 配内存,确保返回的指针指向有效的内存空间。 例如,int *p = (int *)malloc(sizeof(int))可以创建一个整型指 针p,并分配一个整型变量的内存空间。 3.返回指针:将创建的内存空间的指针返回给调用者。 例如,return p;表示将指针p返回给调用者。

4.使用指针函数:调用指针函数的方式与普通函数相同。 例如,int *ptr = func(表示调用func函数,并将返回的指针赋值给指针变量ptr。 四、指针函数的示例: 下面是一个简单的示例,演示了如何使用指针函数。 ``` #include #include int *createArray(int size) int *arr = (int *)malloc(sizeof(int) * size); // 动态分配内存 int i; for (i = 0; i < size; i++) arr[i] = i; // 初始化数组元素 } return arr; // 返回数组首地址 void printArray(int *arr, int size) int i; for (i = 0; i < size; i++)

程序设计指针知识点

程序设计指针知识点 程序设计中,指针是一个非常重要的概念和工具。它可以用来处理内存地址,访问和操作内存中的数据。理解和掌握指针的知识对于编写高效、灵活的代码非常重要。本文将介绍程序设计中常见的指针知识点。 1. 指针的概念 指针是一个变量,它存储的是内存地址。通过指针可以直接访问和修改该地址处存储的值。使用指针可以避免在函数调用和数据传递中的数据拷贝,提高程序的效率。 2. 声明和初始化指针 指针的声明需要使用"*"符号,在声明时可以指定指针所指向的数据类型。指针的初始化可以指向一个已存在的变量,也可以使用动态内存分配的方式初始化。 3. 指针的运算 指针可以进行运算,包括指针的加法、减法、比较等操作。指针的加法和减法根据指针所指向的数据类型而定,例如一个int类型的指针加一会跳过4个字节。 4. 指针与数组的关系

数组名可以看作是数组首元素的指针,因此可以通过指针的方式进 行数组的访问和操作。通过指针可以实现数组元素的遍历、查找等操作。 5. 指针和字符串 字符串在C语言中是以字符数组的形式存在的,因此可以通过指针 的方式对字符串进行处理。指针可以用来遍历字符串、拷贝字符串、 比较字符串等。 6. 指针和函数 指针可以作为函数的参数和返回值。通过指针参数可以实现在函数 中对变量的修改,通过指针返回值可以返回多个结果。函数指针可以 用来实现回调函数等功能。 7. 指针的注意事项 使用指针时需要注意指针是否为空,避免空指针引发的程序崩溃。 还需要注意指针的生命周期和作用域,避免使用已被释放的内存地址。 8. 动态内存分配 动态内存分配可以使用指针来实现。通过动态分配内存可以根据程 序运行时的需要进行内存的申请和释放,提高内存的利用效率。 9. 指针的高级应用

函数与指针选择题

函数与指针练习 1、以下叙述中正确的是 A) 函数名允许用数字开头 B) 函数调用时,不必区分函数名称的大小写 C) 调用函数时,函数名必须与被调用的函数名完全一致 D) 在函数体中只能出现一次return语句 2、函数调用语句:fun( ( exp1, exp2 ), ( exp1, exp2, exp3) ); 含有的实参个数是 A) 2 B) 4 C) 5 D) 1 3、有以下程序 #include main() { int findmax(int,int,int),m; ┋ m=findmax(a,b,c); ┋ } int findmax(int x,int y,int z) { … } 则以下叙述正确的是 A) 在main函数中声明了findmax函数 B) 在main函数中定义了findmax函数 C) 在main函数中两次调用了findmax函数 D) 在main函数内、外重复定义了findmax函数 4、以下叙述中正确的是 A) 用户自己定义的函数只能调用库函数 B) 实用的C语言源程序总是由一个或多个函数组成 C) 不同函数的形式参数不能使用相同名称的标识符 D) 在C语言的函数内部,可以定义局部嵌套函数 5、以下程序中函数f的功能是:当flag为1时,进行由小到大排序;当flag为0时,进行由大到小排序。 #include void f(int b[], int n, int flag) { int i,j,t; for (i=0; ib[j] : b[i] int k=5; void f(int *s) { *s=k; } main() { int m=3,*p=&m; f(p); printf("%d,%d", m, *p); } 程序的运行结果是 A) 5,5 B) 3,3 C) 3,5 D) 5,3 7、以下关于C语言函数参数传递方式的叙述正确的是 A) 数据只能从实参单向传递给形参 B) 数据可以在实参和形参之间双向传递 C) 数据只能从形参单向传递给实参 D) C语言的函数参数既可以从实参单向传递给形参,也可以在实参和形参之间双向传递,可视情况选择使用 8、有以下程序 #include void fun( int x, int y, int *z ) { *z = y-x; } main() { int a, b, c; fun(10,5,&a ); fun(7,a,&b ); fun(a,b,&c ); printf("%d,%d,%d\n", a,b,c ); } 程序运行后的输出结果是 A) -5,-12,-7 B) 5,2,3 C) -5,-12,-17 D) 5,-2,-7 9、有以下程序: #include void fun( int a,int b ) {int t; t=a;a=b;b=t; } main() {int c[10]={1,2,3,4,5,6,7,8,9,0},i; for (i=0;i<10;i+=2) fun(c[i],c[i+1]); for (i=0;i<10;i++) printf("%d,",c[i]); printf("\n"); } 程序的运行结果是()。 A) 1,2,3,4,5,6,7,8,9,0, B) 2,1,4,3,6,5,8,7,0,9, C) 0,9,8,7,6,5,4,3,2,1, D) 0,1,2,3,4,5,6,7,8,9, 10、有以下程序 #include void fun( int *a,int *b) { int *c; c=a;a=b;b=c; } main() { int x=3, y=5, *p=&x, *q=&y ; fun(p,q); printf("%d,%d,",*p,*q); fun(&x,&y); printf("%d,%d\n",*p,*q); } 程序运行后的输出结果是

C语言程序设计答案(黄保和编)第10章

C语言程序设计答案(黄保和编)第10章 一、选择题 1. 设已定义“int a,* p”,下列赋值表达式中正确的是:C)p=&a 2. 设已定义“int x,*p=&x;”,则下列表达式中错误的是:B)&*x 3. 若已定义“int a=1 ,*b=&a”,则“printf(“%d \n”,*b);”的输出结果为:A) a的值。 4. 设已定义“int x,*p,*pl=&x,*p2=&x”,则下列表达式中错误的是:C)p=p1+p2. 5. 设有函数定义“void p(int *x){printf(“%d\n”,*x);}”和变量定义“int a=3;”,则正确的函数 调用是:C)p(&a) 6. 函数“int fun(char * x){char * y=x; while(*y)y++;return(y-x); }”的功能是A)求字 符串的长度。 7. 运行一下程序,输出结果为:B)5 6 int fun (int a,int *b) { a++;(*b)++; return a+*b; } void main() {int x=1,y=2; Printf(“%d”,fun(x,&y)); Printf(“%d”,fun(x,&y)); } 8. 运行以下程序,输出结果为:C)58

#include Int * fun(int a ,int *b) {a++;(*b)++; *b=a+*b; return b; } Void main() { Int x=1,y=2,*z; Z=fun(x,&y); Printf(“%d”,*z); Z=fun(x,&y); Printf(“%d”,*z); } 9. 若已定义“int a[]={1,2 ,3,4},*p=a;”,则下面表达式中值不等于2的是C)*(++a) 10. 若已定义“int a[]={1,2 ,3,4},*p=a+1;”,则p[2]的值为C)4 11. 设已定义“int x[4][10],*p=x[0];”,则下列表达式中的值为整形的是B)*(p+1) 12. 设已定义“char s[]=”ABCD”;”,”printf(“%s”,s+1)”的值为C)BCD 13. 设已定义“char str[]=”abcd”,*ptr=str;”,则*(prt+4)的值为B)0 14. 下面对字符串变量的初始化或赋值操作中,错误的是C)char a[10];a=”OK”; 15. 设已定义“char *ps[2]={“abc”,”1234”};”,则以下叙述中错误的是A)ps为指针变 量,它指向一个长度为2的字符串数组 16. 设已定义“struct {int a,b;} s,*ps=&s”,则错误的结构体成员引用是C)*ps.a

函数指针习题

函数、指针练习题 一、选择题 1. 若有”fun(int a[],int n)”,以下说法正确的是( )。 A.函数的类型为单精度类型B.第一个实参应该是数组名 C.实参和形参之间是一个值传递的过程D.以上说法都不对 2. 下列有关函数调用的说法不正确的是( )。 A.若用值传递方式,则形式参数在函数被调用时才分配内存B.实际参数和形式参数不可以同名C.主调函数和被调用函数可以不在同一个文件中D.函数间传送数据可以使用外部全局变量3. 下列叙述中正确的是( )。 A.函数可以嵌套定义,但不能嵌套调用B.函数可以嵌套调用,也可以嵌套定义 C.函数不可以嵌套定义,也不可以递归调用D.函数可以嵌套调用,但不能嵌套定义 4. 若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )。 A.函数的实参和其对应的形参共占同一存储单元B.形参只是形式上的存在,不占用具体存储单元C.同名的实参和形参占同一存储单元D.函数的形参和实参分别占用不同的存储单元5. 函数中未指定存储类型的变量,其隐含的存储类型是( )。 A.static B.auto C.extern D.register 6. 在一个C语言源程序文件中所定义的全局变量,其作用域为( )。 A.所在文件的全部范围B.所在程序的全部范围 C.所在函数的全部范围D.由具体定义位置和extern 说明来决定范围 7. 所谓静态存储即是在程序运行期间分配固定的( )。 A.变量名称B.变量值C.存储单元D.作用域 8. 设函数中有整型变量n,为保证其在未赋值的情况下初值为0,应选择的存储类别是( )。 A.auto B.register C.static D.auto或register 9. 若变量定义时未初始化,则其值不确定的是( )。 A.静态全局变量B.静态局部变量C.局部变量D.全局变量 10. 以下叙述中错误的是( )。 A.用户定义的函数中可以没有return 语句 B.用户定义的函数中可以有多个return 语句,以便可以调用一次返回多个函数值 C.用户定义的函数中若没有return 语句,则应当定义函数为void 类型 D.函数的return 语句中可以没有表达式 11. 下列关于指针定义的描述中不正确的是( )。 A.指针变量是一种变量,该变量是用来存放某个变量的地址值的 B.指针变量的类型与它所指向的变量类型一致 C.指针变量的命名规则与标识符相同D.在定义指针时,”*”号表示指针变量的指向 12. 若有说明语句:double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是( )。 A.*p=&a; scanf(“%lf”,p); B.*p=&a; scanf(“%f”,p); C.p=&a; scanf(“%lf”,*p); D.p=&a; scanf(“%lf”,p); 13. 以下叙述中错误的是( )。 A.改变函数形参的值,不会改变对应实参的值B.函数可以返回地址值 C.可以给指针变量赋一个整数作为地址值D.当在程序的开头包含文件stdio.h时,可以给指针变量赋NULL 14. 下列程序的运行结果是( )。 #include "stdio.h" int f(int a) { switch (a) { case 0:return 0;

实验十指针.

实验十指针实验目的 1.熟练掌握指针的定义和使用 2.掌握指针数组处理字符串 3.熟练掌握指针作为函数参数,包括数组名作为函数的参数 4.熟练使用字符串处理函数strcmp、strcpy、strlen、strcat。实验内容1.调试,将5 个字符串从小到大排序后输出。源程序(有错误的程序) #include #include void fsort(char cname[][6],int n { int k,j; char tmp[6]; for(k=1;k 调试时设置断点*/ for(j=0;j if(cname[j]>cname[j+1] { t=cname[j]; cname[j]=cname[j+1]; cname[j+1]=t; } } void main( { int i; char cname[5][6]={ “ wang” , ”li ”, ”zhang”, ”jin ”, ”xian ”}; fsort(cname,5; for(i=0;i<5;i++ printf( “n%”s ,cname[i];

} /* 调试时设置断点*/ 运行结果(改正后程序的运行结果) Jin Li Wang Xian Zhang #include "stdafx.h" #include #include void fsort(char cname[][6],int n { int k,j; char t[6]; for(k=1;k for(j=0;j

if(*cname[j]>*cname[j+1] { strcpy(t,cname[j]; strcpy(cname[j],cname[j+1]; strcpy(cname[j+1],t; } } void main( { int i; char cname[5][6]={"wang","li","zhang","jin","xian"}; fsort(cname,5; for(i=0;i<5;i++ 要求定义和调 void ,在函 输入输出示 例: printf("%s\n",cname[i]; 2.编程,输入n(3 个数,输出这n 个数中的最小值及其 下标。用函数,寻找n 个数中的最小值及其下标,函数的 返回值类型是数中使用指针。

相关主题