这是它的完整代码
#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;
}
如您所见,主要是我们有
unsigned short* tmp = (unsigned short*)argv[1];
指针不应该指向变量的“地址”吗?上面的不是(使用&符号)。然而该程序按预期运行。
为什么会这样?
这部分是什么意思?
(unsigned short*)argv[1]
最佳答案
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 位。
关于c - 关于程序中指针的问题。 [C],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6751160/