C 指针的递增指针

C 指针的递增指针,c,pointers,C,Pointers,我试图弄清楚如何增加指针指针的指针,使其指向我想要的值。这本质上是一个指向cstring的指针数组,我想将指针递增到xx指针处。在我当前的应用程序中,如果我想指向第五个指针,那么我可以做的就是将指针定义为char**pointer 现在,它将第五个指针设置为我想要的*指针[0]。我只是在寻找一种方法,以清理成一个1班轮希望这个。我尝试了不同的方法来解决这个问题,但我还没有找到一个有效的解决方案。我最后一次尝试是 *pointer += (sizeof(pointer) * 5); 但它没有起作

我试图弄清楚如何增加指针指针的指针,使其指向我想要的值。这本质上是一个指向cstring的指针数组,我想将指针递增到xx指针处。在我当前的应用程序中,如果我想指向第五个指针,那么我可以做的就是将指针定义为char**pointer

现在,它将第五个指针设置为我想要的*指针[0]。我只是在寻找一种方法,以清理成一个1班轮希望这个。我尝试了不同的方法来解决这个问题,但我还没有找到一个有效的解决方案。我最后一次尝试是

*pointer += (sizeof(pointer) * 5);
但它没有起作用。我想,如果我在系统上得到一个指针的大小4字节,然后乘以我想跳过的指针的数量,那么它会做与发送*pointer++调用的垃圾邮件相同的事情。在递增指针后,我使用以下命令打印其余的cstring,直到指针数组的末尾

while(*pointer[0])
{
   printf("data: %s\n", *pointer);
   pointer++;
}

总的来说,我需要帮助转动5*指针++;调用1行程序。

如果要将指针增加5,只需执行以下操作:

pointer += 5;
这在C语言中很好,它被称为指针算法:编译器将计算出指向对象的大小,并添加正确数量的可寻址单元。如果将指针大小乘以5,结果将与预期不符,如果平台上的指针大小为4,则结果将增加20,而不是5

增量运算符对指针没有任何魔力,您只需向其添加1

此外,你确定*指针++真的做到了你所想的吗?增量的优先级高于取消引用运算符。这两种说法具有相同的效力:

*pointer++;

pointer++;
在这两个语句中,指针都是递增的,在第一个语句中,您也会将指针从旧值中取消引用,因为递增是后缀,并获取它所指向的内容,而不做任何处理

如果在表达式中使用它们,它们将提供两种不同的结果:如果指针的类型为char**假设它是字符串数组,*pointer++将第一个字符串作为指向其第一个字符的指针,然后递增指针,而指针++的结果仍然是一个字符**,只返回指针本身,然后递增指针。注意,在这两种情况下,您都会丢失第一个字符串


我看到了linux标签:您不必考虑这里的平台,它是可移植的。

如果您想将指针增加5,只需执行以下操作:

pointer += 5;
这在C语言中很好,它被称为指针算法:编译器将计算出指向对象的大小,并添加正确数量的可寻址单元。如果将指针大小乘以5,结果将与预期不符,如果平台上的指针大小为4,则结果将增加20,而不是5

增量运算符对指针没有任何魔力,您只需向其添加1

此外,你确定*指针++真的做到了你所想的吗?增量的优先级高于取消引用运算符。这两种说法具有相同的效力:

*pointer++;

pointer++;
在这两个语句中,指针都是递增的,在第一个语句中,您也会将指针从旧值中取消引用,因为递增是后缀,并获取它所指向的内容,而不做任何处理

如果在表达式中使用它们,它们将提供两种不同的结果:如果指针的类型为char**假设它是字符串数组,*pointer++将第一个字符串作为指向其第一个字符的指针,然后递增指针,而指针++的结果仍然是一个字符**,只返回指针本身,然后递增指针。注意,在这两种情况下,您都会丢失第一个字符串

我看到了linux标签:您不必考虑这里的平台,它是可移植的。

如果您有一个*类型的指针,并且添加了N,那么指针将前进N*sizeof*指针或等效的N*sizeofTYPE字节。由于您没有提到内存是否是动态分配的,因此在尝试释放内存时,指针前进将导致未定义的行为。这意味着它是分配的字节数或指向的当前地址

如果您有一个*类型的指针,并且添加了N,那么指针将前进N*sizeof*指针或等效的N*sizeofTYPE字节。由于您没有提到内存是否是动态分配的,因此在尝试释放内存时,指针前进将导致未定义的行为。这意味着它是分配的字节数或指向的当前地址

*指针++;不会做你认为它会做的事。此外,您不需要手动乘以sizeof*p;指针算法,编译器会为您计算出来;然后操纵ptr?*指针++;不会做你认为它会做的事。此外,您不需要乘以sizeof*p
人工操作;指针算法,编译器会为您计算出来;然后操纵ptr?谢谢你。在仔细考虑之后,我意识到出了什么问题,但我还是不太明白。问题是我增加了*pointer+,而不是pointer+,这导致它将*pointer[0]设置为第五个指针,而不是像我在打印**指针时希望的那样,在打印**指针时,它将打印所有更改了[0]的元素,而不是从[5]开始。我不明白的是*指针++和字符**指针上的指针++之间的区别,如果你能快速解释一下,我会的grateful@randynewfield我加了点什么,谢谢你。在仔细考虑之后,我意识到出了什么问题,但我还是不太明白。问题是我增加了*pointer+,而不是pointer+,这导致它将*pointer[0]设置为第五个指针,而不是像我在打印**指针时希望的那样,在打印**指针时,它将打印所有更改了[0]的元素,而不是从[5]开始。我不明白的是*指针++和字符**指针上的指针++之间的区别,如果你能快速解释一下,我会的grateful@randynewfield我补充了一些东西。