首页 > 解决方案 > 为什么 t 引用 argv[3] 的索引 [-1] 是什么意思 谢谢

问题描述

#include <stdio.h>

void f(char**);

int main()
{
    char *argv[] = { "ab", "cd", "ef", "gh", "ij", "kl" };
    f(argv);
    return 0;
}

void f(char **p)
{
    char *t;
    t = (p += sizeof(int))[-1];
    printf("%sn", t);
}

t = (p += sizeof(int))[-1];它是如何引用索引三的,argv我很困惑,因为[-1]

标签: cpointers

解决方案


虽然这是一条奇怪的线,但它确实做到了,因为 的大小int通常为 4,您应该注意这可能不适用于所有机器,因为在某些机器中,int大小可能不是 4 字节。

拥有argv[4]*(argv + 4)since p=相同argv,拥有(p + sizeof(int)) - [1]与拥有(argv + sizeof(int)) - [1]or argv + sizeof(int) - 1、so *(argv + 4 - 1)、so *(argv + 3)or相同argv[3]。.


推荐阅读