周立功教你学C语言编程:教你数组是如何保存指针的
在这里,任何类型的指针都可以传入byte_swap()中,真实地体现了内存操作函数的意义,无论这块内存是什么数据类型,它操作的对象仅仅是一块内存。无论用户传进来的是什么类型,从C99版本后,将void *类型指针赋值给其它类型指针时,不再需要强制类型转换。即循环一次交换一个字节,那么对于int类型数据来说,仅需循环4次就可以了。其前提是两个变量的类型必须相同,比如,交换a、b两个变量的值,其使用方法如下:
byte_swap(&a, &b, sizeof(a));
byte_swap()数据交换函数的接口与实现详见程序清单 1.42和程序清单 1.43。
程序清单 1.42 swap数据交换函数接口(swap.h)
1 #pragma once
2 void byte_swap(void *pData1, void *pData2, size_t stSize);
程序清单 1.43 swap数据交换函数接口的实现(swap.c)
1 void byte_swap(void *pData1, void *pData2, size_t stSize)
2 {
3 unsigned char *pcData1 = pData1;
4 unsigned char *pcData2 = pData2;
5 unsigned char ucTemp;
6
7 while (stSize--){
8 ucTemp = *pcData1; *pcData1 = *pcData2; *pcData2 = ucTemp;
9 pcData1++; pcData2++;
10 }
11 }
针对特定的字符串,指针数组的应用示例详见程序清单 1.44。
程序清单 1.44 比较字符串大小然后输出范例程序
1 #include
2 #include
3 #include "swap.h"
4
5 const char * keyWord[5] = {"eagle", "cat", "and", "dog", "ball"};
6 void show_str (void) // 打印keyWord数据
7 {
8 for (int i = 0; i < sizeof(keyWord) / sizeof(keyWord[0]); i ++){
9 printf("%s", keyWord[i]);
10 }
11 printf("\n");
12 }
13
14 int main(int argc, char *argv[])
15 {
16 show_str();
17
18 if(strcmp(keyWord[0], keyWord[1]) < 0)
19 byte_swap(keyWord, keyWord +1, sizeof(keyWord[0]));
20 show_str();
21 return 0;
22 }
- 到底哪个更好:LabVIEW还是C语言?(07-26)
- 特色C语言平台 SoC设计最佳化(07-31)
- FPGA工程师手记:FPGA系统设计黄金法则(06-17)
- 嵌入式Linux开发之C语言学习秘诀(10-27)
- 单片机的编程语言和开发环境(07-11)
- 51单片机学习感悟与51单片机上拉电阻心得(08-05)
