[英]C array pointer increment
有人向我解釋這個程序。 我有一個 C 代碼,它使用數組中的指針。 對於以下程序
#include<stdio.h>
void function(char**);
void main()
{
char *arr[] = {"ant","bat","cat","dog","egg","fly"};
function(arr);
}
void function(char **ptr)
{
char *ptr1;
ptr1 = (ptr+=sizeof(int))[-2];
printf("%s\n",ptr1);
}
使用索引 -2 時,我得到的輸出為cat
。 從右上角開始,索引值從 1 開始。這是如何發生的。 索引值如何以這種方式運行,而不是從左側開始從 0 開始其索引位置。 我希望以下值在數組中
index value
0 ant
1 bat
2 cat
3 dog
4 egg
5 fly
但輸出是什么
index value
-4 ant
-3 bat
-2 cat
-1 dog
0 egg
1 fly
這是如何運作的?
好的,你的程序有一些問題,但我會盡力...
首先,你的問題在於第ptr1 = (ptr+=sizeof(int))[-2];
我不明白你期望它會做什么,但它實際做的是ptr = ptr[4]; ptr1 = ptr[-2]
ptr = ptr[4]; ptr1 = ptr[-2]
我試圖發布一些調試信息以更清楚地了解此事,
映射到內存中的字符串
0x400624 ant
0x400628 bat
0x40062c cat
0x400630 dog
0x400634 egg
0x400638 fly
驗證sizeof(int)
是 4
在function
開始時
*ptr - 0x400624 - "ant"
在你分配到ptr1
*ptr - 0x400634 - "egg"
ptr1 = 0x40062c - "cat"
如你看到的
ptr
現在指向“egg”,因為它的實際賦值是ptr = ptr[4]
ptr1 = ptr[-2]
您應該閱讀兩件事:“C 求值順序”和“指針算術”
希望這可以幫助...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.