我有以下代碼,應該填寫整個 main 函式只是為了演示指標是如何作業的。
e是 4 的整數,
f是代碼中字符的陣列,
g是指向字串“ABC”的指標。
我對如何e和f作業有很好的理解,但我很好奇這個變數g以及它是否實際上是一個指向 string 的指標s。
#include <stdio.h>
int foo(int a, char b[], char c, char *d)
{
}
int main(void)
{
char s[] = {"ABC"};
char *g = &s[2];
int e = 4;
char f[] = {'3', '7', '\0'};
int y = foo(e, f, g[2], g);
}
uj5u.com熱心網友回復:
這個函式宣告
int foo(int a, char b[], char c, char *d);
等價于以下函式宣告
int foo(int a, char *b, char c, char *d);
int foo(int a, char b[], char c, char d[]);
并且所有的函式宣告都宣告同一個函式。
具有陣列型別的函式引數被編譯器調整為指向陣列元素型別的指標。
在這個函式呼叫中
int y = foo(e, f, g[2], g);
陣列指示符 f 被轉換為指向其第一個元素的指標。
你可以把這個電話想象成
You c int y = foo(e, &f[0], g[2], g);
變數 g 由陣列 s 的第三個元素的地址初始化
char *g = &s[2];
這個指標作為第四個引數傳遞給函式。
你可以寫例如
char s[] = {"ABC"};
char *g = s;
在這種情況下,陣列指示符s被隱式轉換為指向其第一個元素的指標。那是宣告
char *g = s;
相當于
char *g = &s[0];
由于您需要將指向整個陣列的指標宣告為物件,因此您需要撰寫
char ( *g )[4] = &s;
來自 C 標準的參考將很有用(6.3.2.1 Lvalues, arrays, and function designators)
3 除非它是 sizeof 運算子或一元 & 運算子的運算元,或者是用于初始化陣列的字串文字,否則型別為“array of type”的運算式將轉換為型別為“pointer”的運算式鍵入 '' 指向陣列物件的初始元素并且不是左值。如果陣列物件具有暫存器存盤類,則行為未定義。
uj5u.com熱心網友回復:
變數 g 指向字串“abc”的第三個元素,即 c。如果你想要 g 作為整個字串的指標,那么把它作為,
char *g =s;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/383171.html
上一篇:創建HashMap,其中key等于文本中出現頻率最高的第一個字母,value是從該字母開始的所有單詞的鏈表
下一篇:Javascript中的復雜字串
