![](/img/trans.png)
[英]Are there many ways of incrementing a pointer in C and what's the difference here?
[英]difference in incrementing pointer with ** and without in C
我在理解這兩種遞增指針的方式上的區別時遇到了一個問題:
int **a;
a++; //works fine
**a++; //same here
a += n; //still good
**a += n; //is not the same and I can't figure out what is going on
我試圖在這里以相反的順序打印程序的參數
int main(int argc, char **argv)
{
argv += argc; //works fine until it is changed to
// **argv += argc
while (--argc > 0)
{
argv--;
(*argv)--;
while (*(*argv)++)
ft_putchar(**argv);
if (argc - 1 > 0)
ft_putchar('\n');
}
return (1);
}
總結問題-為什么第二種方法不一樣?
**a++
被解析為**(a++)
**a += n
被解析為(**a) += n
這是由於操作員優先
我的建議是在這種情況下始終使用括號以避免任何混淆。
現在來看每種情況:
a++
指針算術。 后增量a
**a++
被解析為**(a++)
a
增量-指針算術 (a++)
是a
-增量前的值 因此,以上內容與以下內容等效(或多或少):
**a;
a = a + 1;
a += n
指針算術。 我期望自己不言自明。
**a += n
這被解析為
(**a) += n
所以,你做一個雙間接a
越來越尖銳整數的值,然后你增加整數(整數運算)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.