c - 关于程序中指针的问题。 [C]

标签 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;   
}

如您所见,主要是我们有

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/

相关文章:

c - 数组衰减为指针的异常?

c++ - 试图理解函数中指针的使用

c - 在 C 中搜索素数时遇到问题

c - 将数组作为数组与作为指针传递给函数

c - 如何将指针指向的 textf 的内容复制到 char 数组(即指针 -> char 数组)

c++ - 从函数 C++ 中删除内存

c - 堆排序适用于字符串,但不适用于整数

c - i=i+1 是未定义的行为吗?

javascript - Emscripten - 有没有办法限制写入标准输出?

c++ - 我应该为初学者学习 "c or c++ "之间的哪一个来使用 Arduino UNO?