自己写一个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 }

程序运行结果

时间: 2024-10-13 16:18:53

自己写一个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

swap函数交换 指针

#include<stdio.h> #include<stdlib.h> void swap(int *p,int *q)//建立swap函数,定义两个指针,并把两个指针的地址交换 { int x=*p; *p=*q; *q=x; return; } main() { int m,n;//定义两个变量 printf("请输入两个数,m,n\n");//输入两个数 scanf("%d,%d",&m,&n); swap(&

函数封装2.4交换某两个变量的值

交换某两个变量的值 def demo(n): def inner(x, y): print(x, y) x, y = y, x print(x, y) return inner @demo def func(p): print(p) x = input("请输入第一个数字:") y = input("请输入第二个数字:") func(x, y) 输出结果: 请输入第一个数字:3.8 请输入第二个数字:2+3j 3.8 2+3j 2+3j 3.8 Process fi

[经典面试题][百度]数组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]相差很大)的情况下或许可以

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

一.问题来源及描述 今天看了July的微博,发现了七月问题,有这个题,挺有意思的. 数组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,那么即使最好情况(递增或者递减)

【面试题】-数组A中任意两个相邻元素大小相差1,找出某个数在数组A中的位置。(所有位置 )

题目描述 数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置. 解题思路 对于目标t,由当前位置a[index]比较开始,下一个可能位置为index = abs(t-a[index]),因为要找出所有的位置,所以找出第一个下标位置之后,再从这个下标的下一个开始重新查找. 代码实现 #include <stdio.h> #include <stdlib.h> #include <math.h> int find_num(int a[

(笔试题)数组A中任意两个相邻元素大小相差1,在其中查找某个数。

题目: 数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置.如数组:[1,2,3,4,3,4,5,6,5],找到4在数组中的位置. 思路: 很明显,在数组中寻找某个数的复杂度为O(n),但在某些特殊数组中,可以通过寻找规律来减少比较次数. 上述数组的规律就是:相邻元素相差1,奇偶交替排列. 如果某个数A[i]等于要查找的数x,那么由于奇偶交替排列的关系,可以跳过下个数A[i+1],即i=i+2: 如果某个数A[i]不等于要查找的数x,那么由于相邻元素相差1

JavaScript 自己写一个 replaceAll() 函数

JavaScript 的  replace()  方法可以在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. 但是,只输入字符串的话,仅替换第一个字符,当然也可以用正则表达式来进行全局替换: 1 // 查找所有 word 替换成 words 2 string.replace(/word/g,"words"); 那么,问题来了,如果我用的是变量呢?百度到可以这么来: 1 // 随便来一条字符串 2 let str = "How old are you? Ye

为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