这是它的完整代码
#include <stdio.h>
#include <string.h>
void reverse_string(unsigned short *buf, int length)
{
int i;
unsigned short temp;
for (i = 0; i < length / 2; i++)
{
temp = buf[i];
buf[i] = buf[length - i - 1];
buf[length - i - 1] = temp;
}
}
int main(int argc, char **argv)
{
unsigned short* tmp = (unsigned short*)argv[1];
reverse_string(tmp,strlen(argv[1]) / 2);
printf("%s",argv[1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,在主要方面,我们有
unsigned short* tmp = (unsigned short*)argv[1];
Run Code Online (Sandbox Code Playgroud)
Arent指针应该指向"变量的地址"?上面的那个不是(使用&符号).然而,该计划按预期工作.
为什么会那样?
这部分意味着什么?
(unsigned short*)argv[1]
Run Code Online (Sandbox Code Playgroud)
argv 是一个指向数组的指针:
argv[0][0] (一char)argv[0] (一char*)argv (一char**)
unsigned char* tmp = (unsigned char*)argv[1];
...有效,因为你引用了该集合中的第二个"字符串".
请注意,在这种情况下," char"和" unsigned short" 可能大致相当,具体取决于编译器和平台,但假设这可能不是一个好主意.例如,如果编译为启用"unicode"命令行,则可能会从命令行向您转发" short"而不是" char".但是,这可能是一个危险的假设,因为"这些日子"," short"通常是16位,而" char"通常是8位.