自己写一个swap函数交换任意两个相同元素值 对空指针的使用 字节大小的判断(一)

 1 #include <stdio.h>
 2 struct Point{
 3     int x;
 4     double y;
 5     Point(int x = 0, double y = 0):x(x), y(y){}
 6     void print(){
 7         printf("(%d, %lf)", x, y);
 8     }
 9 };
10 void swap (char *a, char *b, size_t width){
11     char tmp;
12     while(width--){
13         tmp = *a;
14         *a++ = *b;
15         *b++ = tmp;
16     }
17 }
18 //width是交换两个元素的字节大小,用sizeof 求出
19 void myswap(void *x, void *y, size_t width){
20     swap((char *)x, (char *)y, width);
21 }
22 int main(){
23     int inta = 1, intb = 2;
24     printf("before exchange: inta=%d\tintb=%d\n", inta, intb);
25     //交换整形inta和intb的值
26     myswap(&inta, &intb, sizeof(int));
27     printf("after  exchagge: inta=%d\tintb=%d\n", inta, intb);
28
29     char chara = ‘a‘, charb = ‘A‘;
30     printf("before exchange: chara=%c\tcharb=%c\n", chara, charb);
31     //交换字符chara和字符charb的值
32     myswap(&chara, &charb, sizeof(char));
33     printf("after  exchagge: chara=%c\tcharb=%c\n", chara, charb);
34
35     Point pointa(1, 1.1), pointb(3, 3.3);
36     printf("before exchange: pointa="); pointa.print();
37     printf("\tpointb="); pointb.print(); printf("\n");
38     //交换结构体pointa和pointb的值
39     myswap(&pointa, &pointb, sizeof(Point));
40     printf("before exchange: pointa="); pointa.print();
41     printf("\tpointb="); pointb.print(); printf("\n");
42     return 0;
43 }

程序运行结果

时间: 05-31

自己写一个swap函数交换任意两个相同元素值 对空指针的使用 字节大小的判断(一)的相关文章

自己写一个swap函数交换任意两个相同类型元素的值 对空指针的使用 字节大小的判断(二)了解原理

验证的代码: 1 #include <stdio.h> 2 int main(){ 3 4 char c = 'z'; 5 int num = ('Z' << 24) + (c << 16) + ('A' << 8) + 'a'; 6 7 printf("'Z'=0x%x c=0x%x 'A'=0x%x 'a'=0x%x\n", 'Z', c, 'A', 'a'); 8 printf("num=0x%x\n", num

[经典面试题][百度]数组A中任意两个相邻元素大小相差1,在其中查找某个数。

题目 数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置.如数组:[1,2,3,4,3,4,5,6,5],找到4在数组中的位置. 思路 这道题目最差时间复杂度也是O(N),所以重点在于能不能找到一种尽可能减少比较次数的方法. 如数组:[1,2,3,4,3,4,5,6,5],找到4在数组中的位置.4和1比较,差为3,那么即使最好情况(递增或者递减),4也就是在a[3]的位置,可以跳过a[1]a[2].这样在特定数组(目标值和a[1]相差很大)的情况下或许可以

为LoadRunner写一个lr_save_float函数

LoadRunner中有lr_save_int() 和lr_save_string() 函数,但是没有保存浮点数到变量的lr_save_float函数.<lr_save_float() function for LoadRunner>这篇文章介绍了如何写一个这样的函数: http://ptfrontline.wordpress.com/2010/01/27/lr_save_float-function-for-loadrunner/ void lr_save_float(const float

Web前端面试题:写一个mul函数

问题:写一个mul函数调用时将生成以下输出: console.log(mul(2)(3)(4)); // output : 24 console.log(mul(4)(3)(4)); // output : 48 回答:时允 这个应该是题主想要的答案,支持任意次数调用.主要是考察了对递归的理解,和 valueOf 的使用. function mul(x) { const result = (y) => mul(x * y); result.valueOf = () => x; return r

写一个memcpy()函数你能拿几分?

不考虑性能的话,memcpy()在C99编译器下可以写为: void *memcpy(void *restrict dest, const void *restrict src, size_t n) { int i; const char *s = src; char *d = dest; assert(dest && src); assert((src + n <= dest) || (dest + n <= src)); for (i = 0; i < n; i++)

写一个PHP函数,实现扫描并打印出自定目录下(含子目录)的所有jpg文件名

<?php $dir = "E:\照片\\"; //打印文件夹中所有jpg文件 function printJpg($dir,$deep = ""){ $dirSource = dir($dir); while($d = $dirSource->read()){ if($d == "." || $d == ".."){ continue; } if(filetype($dir.$d) == "dir&qu

条款25:考虑写出一个不抛异常的swap函数

条款25:考虑写出一个不抛异常的swap函数 swap函数在C++中是一个非常重要的函数,但实现也非常复杂. 看一个缺省的std::swap函数的实现 namespace std { template<typename T> void swap( T& a , T& b) { T temp(a); a = b; b = temp } } ①内置类型的调用 int a = 2; int b =3; std::swap(a, b); cout<<"a:&quo

Effective C++笔记_条款25考虑写出一个不抛出异常的swap函数

1 // lib中的swap 2 namespace std { 3 template<typename T> 4 void swap (T& a, T& b) 5 { 6 T temp(a); 7 a = b; 8 b = temp; 9 } 10 } 11 12 // 缺点:需要赋值大量的数据,但是有的时候并不要复制如此多的内容 13 class WidgetImpl { 14 public: 15 //... 16 private: 17 int a, b, c; 18

写一个函数对字符串数组排序,使所有变位词都相邻

题目 写一个函数对字符串数组排序,使得所有的变位词都相邻. 解答 首先,要弄清楚什么是变位词.变位词就是组成的字母相同,但顺序不一样的单词. 比如说:live和evil就是一对变位词.OK,那么这道题目的意思就很清楚了, 它并不要求我们将字符串数组中的字符串按字典序排序,否则我们直接调用STL中的sort 函数就可以了.它要求我们在排序的过程中,按照变位词的准则来排序. 这种情况下,我们还是可以调用sort函数,不过要自己写一个对比函数. 一般情况下我们如果要排序一个长度为n的数组A,我们可以这

作业二、comp和swap函数

一.swap函数的代码及运行情况 1.代码 1 #include<stdio.h> 2 int main() 3 { 4 void swap(int *m,int *n); 5 int a,b; 6 int *p1,*p2; 7 scanf("%d,%d",&a,&b); 8 p1=&a; 9 p2=&b; 10 swap(p1,p2); 11 printf("%d,%d\n",*p1,*p2); 12 return 0;