C Simple Swap Program – Assignments
通过赋值来实现交换变量
vi swap_simple0.c
#include <stdio.h>

int main() {
int a = 23, b = 47;
int t;
printf("Before. a: %d, b: %d\n", a, b);
t = a;
a = b;
b = t;
printf("After. a: %d, b: %d\n", a, b);
return 0;
}
cc -o swap_simple0 swap_simple0.c
swap_simple0
Before. a: 23, b: 47
After. a: 47, b: 23
C Simple Swap Program – Exclusive-Or
通过异或来实现,新建 swap_simple1.c
#include <stdio.h>

int main() {
int a = 23, b = 47;

printf("Before. a: %d, b: %d\n", a, b);
a ^= b;
b ^= a;
a ^= b;
printf("After. a: %d, b: %d\n", a, b);
return 0;
}
% cc -o swap_simple1 swap_simple1.c
% swap_simple1
Before. a: 23, b: 47
After. a: 47, b: 23
C Swap Program – Fails
这样做是不行的,所有的交换都在swap中,但是这个交换没有返回值,当i,j 交换后,随即释放,不会对a,b 有任何影响。
说点题外化,这个swap函数在,就像你曾经做过的春梦,你和女神在梦中一番云雨。也互相交换了体液但是当梦醒来,一切美梦中的意象瞬间幻灭,女生也并没有怀上你的孩子,对现实没有任何影响。
#include <stdio.h>

void swap(int i, int j) {
int t = i;
i = j;
j = t;
}

int main() {
int a = 23, b = 47;
printf("Before. a: %d, b: %d\n", a, b);
swap(a,b);
printf("After. a: %d, b: %d\n", a, b);
return 0;
}
% cc -o swap0 swap0.c
% swap0
Before. a: 23, b: 47
After. a: 23, b: 47
我们说C 是一个古老的语言,相当古老,在C中函数只能有一个返回值,我们可以在python 中通过返回多个值实现交换如下,在C中我们一般在代码中不操作数值,而是通过操作指针来操作数据
在Python中,这个swap函数有返回值,return a,b 返回值是什么,是梦与现实的桥梁,return将你梦中的结晶带回了现实。
def swap(a,b):
c=a
a=b
b=c
return a,b
def main():
a=23
b=47
a,b=swap(a,b)
print('a=',a,'b=',b)

main()
a= 47 b= 23
C Swap Program with Pointers – Works
这段代码能够帮助我们理解指针的含义
swap这样写,你的女神梦见你,托梦给了你,女生将她房间的地址告诉了你,你梦游过去了,虽然你以为你在做梦,实际上你肉身翻墙进入了女神的闺房,一番xxoo…,女神怀孕了
#include <stdio.h>

void swap(int *i, int *j) {
int t = *i; //将*i(a)的数值赋值给t
*i = *j; //*将j(b)的数值赋值给i(&a)所指向的内存空间
*j = t; //*将t的数值赋值给j(&b)所指向的内存空间
}

void main() {
int a = 23, b = 47;
printf("Before. a: %d, b: %d\n", a, b);
swap(&a, &b);
printf("After . a: %d, b: %d\n", a, b);
}
% cc -o swap1 swap1.c
% swap1
Before. a: 23, b: 47
After. a: 47, b: 23
引用是C++引入的新语言特性,是C++常用的一个重要内容之一,
曾经有人说过c++是上古神兽(C)下的一个蛋,此蛋青出于蓝,禀赋异常强大,神蛋可以通过冥想意淫让女神怀孕,引用即是意淫。。。。。
#include <iostream>
using std::cout;

void swap(int& i, int& j) {
int t = i;
i = j;
j = t;
}

int main() {
int a = 23, b = 47;
cout << "Before. a: " << a << ", b: " << b << "\n";
swap(a, b);
cout << "After. a: " << a << ", b: " << b << "\n";
return 0;
}
% CC -o swap_CC swap.cpp
% swap_CC
Before: a: 23, b: 47
After: a: 47, b: 23
代码的本质是哲学,是诗篇,而函数就是码农的春梦和意淫…