第一个问题:这是一个不申请变量和空间反转字符串的问题
我在网上看到一个代码 可以正确运行,但是对其中的一种用法不理解
#include <iostream>
using namespace std;
char* Reverse(char *s)
{
if (strlen(s)==1)
{
return s;
}
if(*s)
{
s[0]=s[0]^s[strlen(s)-1];
s[strlen(s)-1]=s[0]^s[strlen(s)-1];
s[0]=s[0]^s[strlen(s)-1];
//unsigned short gg=(*(s+strlen(s)-1))<<8;
//cout<<gg<<endl;//24832=97*256
*(unsigned short *)(s+strlen(s)-1)=(*(s+strlen(s)-1))<<8; //unsigned short长度为2byte
//左移操作本身并不改变(*(s+strlen(s)-1))的值
Reverse(s+1);
*(unsigned short *)(s+strlen(s))=(*(s+strlen(s)+1));
return s;
}
else return s;
}
int main()
{
char a[]="abcdef";
cout<<Reverse(a);
return 0;
}
*(unsigned short *)(s+strlen(s)-1)=(*(s+strlen(s)-1))<<8; 这一句百思不得其解,举例来说一下
在第一次递归前字母 a 和f 交换了位置 变成了 fbcdea 最后还有一个结束符‘\0’上面这句语句可以实现 a和'\0'的互换
求解答
详细的好
能帮助我的给分.(*(s+strlen(s)-1))是char型的 左移8位不是全0了吗 a去哪了呢? 看程序运行的结果 知道这个语句能变成 '\0''a'.
C中的位移是直接补零吗?有什么算术位移和逻辑位移分别吗?
第二个问题:如:int a =7;char b='g' 怎么能够cout出变量a和变量b的每个位的具体情况 我的意思就是 如a 能显示出 0000111出来 b显示出它的二进制位
第三个问题:
int main()
{
char a[]="adfdfsdfasd";
cout<<a;//cout<<a[1];
return 0;
}
我的问题是怎么获取字母d的内存地址 我用a[1]的话输出的是字母d 用&a[1]输出的是除了a之后的字符串。谢谢,多答多给分