关于程序中指针的问题.[C]

dik*_*era 2 c pointers

这是它的完整代码

#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)

cha*_*ley 6

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位.