C指针的经典例子

C指针的经典例子,第1张

#include <stdio.h>  

  

main()  

{  

int a,b /* 定义a,b两个整形变量用于输入两个整数 */ 

int *point_1,*point_2 /* 定义三个指针变量 */ 

scanf("%d,%d",&a,&b) /* 格式化输入a,b的值 */ 

point_1 = &a /* 把指针变量point_1的值指向变量a的地址 */ 

point_2 = &b /* 把指针变量point_2的值指向变量b的地址 */ 

compositor(point_1,point_2) /* 调用自定义的排序涵数,把a,b的地址传递给point_1和point_2 */ 

printf("%d,%d",a,b) /* 打印出a,b的值 */ 

}  

  

static compositor(p1,p2)  

int *p1,*p2 /* 定义形式参数p1,p2为指针变量 */ 

{  

int temp /* 建立临时存储变量 */ 

if (*p1<*p2) /* 如果*p1<p2,注意这里的*p1和*p2其实就是a和b */ 

{  

temp = *p1 /* 利用变量temp用于临时存储*p1和就是a的值 */ 

*p1 = *p2 /* 将*p1的值也就是a的值换成*p2的值也就是b的值,等价于a=b */ 

*p2 = temp /* 将*p2的值也就是temp的值等价于b=temp */ 

}  

}  

 

都说指针是C语言的精髓,那指针究竟有哪些经典应用场合呢?

指针有三大类:指向数据的指针,指向函数的指针和范型指针(void*)。

其经典的应用场合,可以分为以下10类:

1 与函数相关的使用

1.1 在函数中用作 输出型参数,产生副作用 (更新被调函数中的局部变量的值)

1.2 在函数中用作 输出型参数,用于返回多个值

1.3 在函数中用作 输入型参数,指向复合类型,避免传值的副作用 (性能损耗)

1.4 用做 函数返回值,返回一个左值

返回左值在C++中应用比较多,特别是用引用来返回左值,如返回ostream&,或重载[]、=等运算符。

1.5 用于指向函数的 函数指针 ,使用函数指针调用回调函数

2 用于指向堆内存

实质也是通过库函数(malloc.h)返回void*指针。

3 与void配合使用,用void*来表示一个 泛型指针

4 用于指向数组名( 数组指针

5 用于指向一个字符串常量( 字符串常量指针

关于字符数组和字符指针可以图示如下:

在字符指针数组,数组元素是一个字符指针,用于指向一个字符串常量,如:

6 在数据结构中,用作 链式存储

附加:在字符串、文件 *** 作中跟踪 *** 作位置。

如分割字符串函数strtok():

char *strtok(char s[], const char *delim)

对该函数的一系列调用将str拆分为标记(token),这些标记是由分隔符中的任何字符分隔的连续字符序列。

在第一次调用时,函数需要一个C风格字符串作为str的参数,str的第一个字符用作扫描标记的起始位置。在随后的调用中,函数需要一个空指针,并使用最后一个标记结束后的位置作为扫描的新起始位置。

要确定标记的开头和结尾,函数首先从起始位置扫描未包含在分隔符中的第一个字符(它将成为标记的开头)。然后从这个标记的开头开始扫描分隔符中包含的第一个字符,它将成为标记的结尾。如果找到终止的空字符,扫描也会停止。

标记的末端将自动替换为空字符,函数将返回标记的开头。

在对strtok的调用中找到str的终止空字符后,对该函数的所有后续调用(以空指针作为第一个参数)都会返回空指针。

找到最后一个标记的点由函数在内部保留,以便在下次调用时使用 (不需要特定的库实现来避免数据争用)。

二进制文件的随机读写:

在标记文件信息的结构体FILE中,包含3个标识文件 *** 作位置的指针。

code demo:

-End-

利用指代替下标进行数组编程:从健盘输入8个整数放入数组,然后将每个奇数加1,每个偶数减1,最后输出数组的所有元素.

程序如下:

main()

{

int a[8],*p /*定义变量和数组*/

for(p=ap<a+8p++)

scanf("%d",p)/*输入*/

for(p=ap<a+8p++)

{ if(*p%2==0) (*p)--

else (*p)++

}

for(p=ap<a+8p++)

printf("%d\t",*p) /*一个个输出*/

}

其实指针和数组是一个东东,数组名就是一个指针,如果个这例子看不懂,再问!!!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11100167.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存