C/C++指针之提高篇详解(二) | 您所在的位置:网站首页 › 古埃及人介绍大全 › C/C++指针之提高篇详解(二) |
一、引言
C/C++语言中引入了指针,使得程序能够直接访问内存地址,使得很多复杂的操作变得简单,同时也提高了程序的运行效率。指针即是地址,但是地址却是通过指针变量来存储的。这就好比我们的教室,每个教室都有一个房间号,一个房间号也对应着一间教室,此处的教室就是固定的地址(指针),其地址是通过房间号(指针变量)来表示的。地址就是指针,而房间号就是指针变量。 笔者在《C/C++指针入门详解(一)》一文中给出了指针的基础知识和基本用法。详见链接: https://blog.csdn.net/sunnyoldman001/article/details/128061186?spm=1001.2014.3001.5502 本文给出了有关指针的更多应用场景及示例,例如函数指针、文件指针、更换数据类型、双指针等等。 二、指针的应用1.根据需要改变内存中数据的数据类型 例1:在位域中,经常会根据需要把某单一变量存储到内存中,然后根据需要将其转换为结构体类型,进而可以进行一些复杂的操作,例如提取某个或某几个比特位上的数据等。 示例代码: #include"stdio.h" struct weiyu { unsigned char a:5; unsigned char b:2; unsigned char c:4; }; int main() { weiyu *p; unsigned short val = 1521;//10111110001 //将存储变量a的地址赋值给指针变量p,并将内存中的数据类型改换为结构体 p = (struct weiyu*)&val; printf("weiyu a = %d\n", p->a); printf("weiyu b = %d\n", p->b); printf("weiyu c = %d\n", p->c); return 0; }运行结果: 运行结果: 运行结果: 此函数仅仅是一个声明,无函数体。此处的“函数名”严格来说只是一个指针,它指向了某个函数的入口地址。 例4:利用函数指针实现求两个整数的最大值、最小值、和。 参考的代码: #include"stdio.h" int max( int a, int b ); int min( int a, int b ); int sum( int a, int b ); int (*f)(int a, int b); int main() { int a = 1, b = 2; f = max; int c = (*f)( a, b ); printf( "%2d 和 %2d 的最大值: %2d\n", a, b, c ); f = min; c = (*f)( a, b ); printf( "%2d 和 %2d 的最小值: %2d\n", a, b, c ); f = sum; c = (*f)( a, b ); printf( "%2d 和 %2d 的和: %2d\n", a, b, c ); return 0; } int max( int a, int b ) { return a > b ? a : b; } int min( int a, int b ) { return a > b ? b : a; } int sum( int a, int b ) { return a + b; }运行结果: 例5:给定5个字符串,然后统计字符串的最大长度。 参考代码: #include"stdio.h" #include"string.h" #define N 5 int main() { int i, length, len; char *str[N] = { "C/C++", "computer", "programming", "pragma", "once" }; char *maxLenStr; length = 0; for( i=0; i length = len; maxLenStr = str[i]; } } printf( "最长字符串是:%s, 其长度为:%d\n", maxLenStr, length ); return 0; }运行结果: —————————————————————— 未完待续! |
CopyRight 2018-2019 实验室设备网 版权所有 |