0
#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]

4

2 回答 2

0

虽然这是一条奇怪的线,但它确实做到了,因为 的大小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]。.

于 2020-01-23T15:16:04.107 回答
-1

sizeof(int)在你的情况下是 4

p += 4;-p引用传递数组的第 5 个元素(索引为 4 的元素)

t = p[-1]t 引用传递数组的第 4 个元素(索引 == 3)

PS t = (p += 4);相当于:

p+=4;
t = p;
于 2020-01-23T15:24:41.037 回答