#include <stdio.h>
#define STOP 0
void function(char**);
int main() {
char*arr[] = { "icsp","hw6","fall","spring","autumn","winter" };
function(arr);
return 0;
}
void function(char**ptr) {
char*ptr1;
ptr1 = (ptr = sizeof(int))[-2];
printf("%s\n", ptr1);
}
我有這段代碼作為我的作業來解釋它是如何作業的。我不知道這個指向指標陣列的指標是如何作業的,這條線有什么作用ptr1 = (ptr = sizeof(int))[-2];?輸出是
fall
如果你解釋一下,我會很感激的。
uj5u.com熱心網友回復:
arr是char指標陣列。
arr
----
| |->"icsp"
----
| |->"hw6"
----
| |->"fall"
----
| |->"spring"
----
| |->"autumn"
----
| |->"winter"
----
當function()使用傳遞arr引數呼叫函式時,函式引數ptr將指向 array arr。
ptr-
|
----
| |->"icsp"
----
| |->"hw6"
----
| |->"fall"
----
| |->"spring"
----
| |->"autumn"
----
| |->"winter"
----
讓我們解碼這個陳述句
ptr1 = (ptr = sizeof(int))[-2];
假設在你的平臺上sizeof(int)是4位元組,那么這個
ptr = sizeof(int) => ptr = 4
將ptr指向 string "autumn"。
----
| |->"icsp"
----
| |->"hw6"
----
| |->"fall"
----
| |->"spring"
----
ptr--> | |->"autumn"
----
| |->"winter"
----
現在,-2下標應用于結果指標 ieptr[-2]將在2當前元素的索引之前給出元素,即指向 string 的指標fall。它將被分配給ptr1. 列印ptr1給出輸出fall。
uj5u.com熱心網友回復:
在函式內function,指標ptr指向陣列的第一個元素,arr因為最后用作函式呼叫的引數的隱式轉換
function(arr);
在這個運算式中
ptr = sizeof(int)
使用了指標演算法。如果假設sizeof( int )等于4那么上面的運算式等價于
ptr = 4
現在指標ptr指向陣列的第五個元素,該元素arr包含指向字串文字的指標"autumn"。
然后使用下標運算子
ptr1 = (ptr = sizeof(int))[-2];
表達方式
(ptr = sizeof(int))[-2]
相當于
*( (ptr = sizeof(int)) -2 )
那是指標運算式
(ptr = sizeof(int)) -2
現在指向陣列的第三個元素,即指向指向的元素(字串文字)"fall" (指標向左移動了兩個位置)
取消參考指標
ptr1 = *( (ptr = sizeof(int)) -2 )
您將獲得一個指向此呼叫中輸出的字串文字的第一個字符的指標
printf("%s\n", ptr1);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/385074.html
上一篇:c 唯一指標的動態轉換回傳什么?
下一篇:printCat1(Cat*cat)Vs。printCat2(Catcat)&MorePointers'Questions
