user-0 提问: 怎么调换第一个与第8个字节

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 引用 3 楼 lin5161678的回复:[quote=引用 2 楼 不进则退1 的回复:] char b=NULL; b=a[7]; a[7]=a[0]; a[0]=b;NULL用得莫名其妙[/quote] 说的对。应该用更具体的值对char b进行初始化。

user: user-2
content: 引用 4 楼 离水的鱼儿的回复:[quote=引用 3 楼 lin5161678 的回复：][quote=引用 2 楼 不进则退1 的回复:] char b=NULL; b=a[7]; a[7]=a[0]; a[0]=b;NULL用得莫名其妙[/quote]而且应该用无符号类型吧，有可能会超过表达式范围[/quote] 好的，学习了，谢谢。

user: user-2
content: 引用 7 楼 自信男孩的回复:[quote=引用 2 楼 不进则退1 的回复:] char b=NULL; b=a[7]; a[7]=a[0]; a[0]=b; 直接用int就可以，定义int b; 不过，用NULL初始化确实有问题，不初始化也没关系，因为第一条语句就是b = a[7];[/quote] 受教了。谢谢。

user: user-3
content: 引用 2 楼 不进则退1 的回复:char b=NULL; b=a[7]; a[7]=a[0]; a[0]=b;NULL用得莫名其妙

user: user-4
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！

user: user-3
content: 引用 6 楼 赵4老师 的回复:#include <stdio.h> #define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0) char   *p1="1" ,*p2="2" ; char    c1=1   , c2=2   ; short   s1=1   , s2=2   ; int     i1=1   , i2=2   ; __int64 I1=1i64, I2=2i64; float   f1=1.0f, f2=2.0f; double  d1=1.0 , d2=2.0 ; void main() {     SWAP((int)p1,(int)p2);                printf("char *     %5s,   %5s\n",p1,p2);     SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);     SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);     SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);     SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);     SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);     SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);      SWAP(c1,c1);     printf("%d\n",c1); } //char *         2,       1 //char           2,       1 //short          2,       1 //int            2,       1 //__int64     2,    1 //float          2,       1 //double        2,      1 //2 这是一个糟糕的做法  存在很多问题  比如   SWAP((int)p1,(int)p2); 直接是语法错误 表达式 (int)p1 不是左值 不能 &  只能交换整型 不能交换浮点

user: user-5
content: 引用 2 楼 不进则退1 的回复:char b=NULL; b=a[7]; a[7]=a[0]; a[0]=b; 直接用int就可以，定义int b; 不过，用NULL初始化确实有问题，不初始化也没关系，因为第一条语句就是b = a[7];

user: user-4
content: #include <stdio.h> #define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0) char   *p1="1" ,*p2="2" ; char    c1=1   , c2=2   ; short   s1=1   , s2=2   ; int     i1=1   , i2=2   ; __int64 I1=1i64, I2=2i64; float   f1=1.0f, f2=2.0f; double  d1=1.0 , d2=2.0 ; void main() {     SWAP((int)p1,(int)p2);                printf("char *     %5s,   %5s\n",p1,p2);     SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);     SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);     SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);     SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);     SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);     SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);      SWAP(c1,c1);     printf("%d\n",c1); } //char *         2,       1 //char           2,       1 //short          2,       1 //int            2,       1 //__int64     2,    1 //float          2,       1 //double        2,      1 //2

user: user-6
content: 数组访问交换不会么？

user: user-7
content: 引用 3 楼 lin5161678 的回复：[quote=引用 2 楼 不进则退1 的回复:] char b=NULL; b=a[7]; a[7]=a[0]; a[0]=b;NULL用得莫名其妙[/quote]而且应该用无符号类型吧，有可能会超过表达式范围

user: user-2
content: char b=NULL; b=a[7]; a[7]=a[0]; a[0]=b;

user: user-8
content: std::swap(a[0], a[7]);