C 为什么t引用argv[3]的索引[-1]的意思是什么

C 为什么t引用argv[3]的索引[-1]的意思是什么,c,pointers,C,Pointers,t=p+=sizeofint[-1];它是如何引用argv的索引3的?我很困惑,因为[-1]虽然这是一条奇怪的线,但它确实是这样做的,因为int的大小通常是4,您应该注意,这可能不适用于所有机器,因为在某些机器中,int的大小可能不是4字节 有argv[4]与*argv+4相同,因为p=argv,有p+sizeofint-[1]与有argv+sizeofint-[1]或argv+sizeofint-1相同,所以*argv+4-1,所以*argv+3或argv[3] sizeofint在您的情况下

t=p+=sizeofint[-1];它是如何引用argv的索引3的?我很困惑,因为[-1]

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

有argv[4]与*argv+4相同,因为p=argv,有p+sizeofint-[1]与有argv+sizeofint-[1]或argv+sizeofint-1相同,所以*argv+4-1,所以*argv+3或argv[3]

sizeofint在您的情况下是4

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

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

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

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

sizeofint=4,因此t[0]指向argv[4]。然后访问索引t[-1],它指向argv[3],您在哪里找到了这段代码?你从哪里得到的文件没有吗?对于需要读取、理解或维护的常见代码,通常不鼓励使用此类代码。对于此表达式的逻辑,基本规则是,对于任何指针或数组p和索引i,表达式*p+i完全等于p[i]。由此我们可以得出p+i是指向i:th元素的指针&p[i]。作为一个指针,我们可以添加一个索引来获得第三个指针,这个指针可以被解引用来获得一个值。从所有这些中,我们可以得到*p+sizeofint-1或&p[sizeofint][1],没有必要指出评论中已经澄清的内容answer@EUS除非评论不是用来回答问题的。答案应该放在答案中。然而,这一个,可以大大改进。@EugeneSh.,你可以帮我做,我认为这更好。但也可能存在其他观点:DV?有什么解释吗
p+=4;
t = p;