[英]Printing a string in C with pointer arithmetic including arrays, integers and pointers
有三種結構; 數組a
和b
以及指針c
:
c --------------------------.
|
V
___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___
a --> | a | \0| \0| \0| \0| b | i | g | \0| \0| r | i | d | e | \0|
´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´
___ ___ ___ ___ ___ ___ ___
b --> | F | l | y | i | n | g | \0|
´´´ ´´´ ´´´ ´´´ ´´´ ´´´ ´´´
這是代碼:
int main(){
char a[3][5]={"a", "big", "ride"};
char b[]="Flying";
char *c=*(a+1);
puts(b+(c-*a)-2);
return 0;
}
現在我無法理解的是表達式b+(c-*a)-2
。 有人可以善良並打破它嗎?
b+(c-*a)-2
與&b[(c-*a)-2]
。 換句話說,如果(c-*a)-2
是字符串b
的偏移量,則puts(b+(c-*a)-2)
將從puts(b+(c-*a)-2)
的位置開始打印字符串b
(c-*a)-2
偏移。 c
被指定為*(a+1)
或*(&(a [1])),或簡稱a[1]
,指向"big"
c-*a
的值(它是5) b[5-2]
是"ing"
免責聲明:如果有人試圖在我公司辦理此類代碼,他將不再為我們工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.