c語言,解釋下charx5的意思

2021-03-05 09:17:28 字數 5445 閱讀 4524

1樓:匿名使用者

從內向外分析:

*x() : x是一個無引數函式,該函式返回一個指標*(*x())[5] : 由於c語言宣告的優先順序規則是字尾優先於字首,所以這裡就要先考慮後面的[5],再看前面的星號,於是得出:

x是一個無參函式,該函式返回一個指標,返回的這個指標指向一個有5個指標元素的陣列。

char(*(*x())[5])() : 依然先看字尾得知這是個函式,而且沒有引數,再看字首,結合字尾可知這是一個返回值型別為char的函式,再結合對*(*x())[5]的分析得出最後結論:

x是一個無引數函式,該函式返回一個指標,返回的這個指標指向一個有5個指標元素的陣列,該陣列的每個元素都可指向一個返回值型別是char的元素函式。

2樓:匿名使用者

typedef宣告自定義資料型別,配合各種原有資料型別來達到簡化程式設計的目的。對於char (*(*x())[5])(); 我們可利用typedef來簡化。

先定義:typedef char (*fun)(); 那麼:char (*(*x())[5])(); => fun (*x())[5];再定義:

typedef fun a[5]; 那麼:fun (*x())[5]; => a *x(); 對於這種形式正是我們最熟悉的函式宣告型別。

根據上面的簡化模式,可逐步描述char (*(*x())[5])();的含義:

第一步:a *x(); 宣告x是一個輸入引數為空且返回a的指標型別的函式。

第二步:fun (*x())[5]; 宣告x是一個輸入引數為空且返回指向含有5個fun型別陣列的指標的函式。

第三步:char (*(*x())[5])(); 宣告x是一個輸入引數為空且返回指向含有5個指向函式指標且返回值為字元型別的陣列指標的函式。

利用上述的方法,幾乎可以理解任何複雜型別的宣告,例如linux系統呼叫函式signal的函式原型如下:

void (*signal(int signo,void (*func)(int))) (int);

對於該函式原型,給人的第一感覺就是複雜,不知從何下手。其實同樣可以利用上面所講的typedef宣告來簡化:先定義typedef void (*sighandler_t)(int); 那麼void (*signal(int signo,void (*func)(int))) (int); => sighandler_t signal(int signo, sighandler_t handler);

對於sighandler_t signal(int signo, sighandler_t handler); 就和我們常見的函式宣告非常類似了,唯一不同的是sighandler_t不是我們常見的基本資料型別,假如你不知道sighandler_t具體是什麼型別,為了快速理解sighandler_t signal(int signo, sighandler_t handler);的含義,你可以把sighandler_t想象成為你最熟悉的int或char型別,對於int signal(int signo, int handler);你會很輕鬆的理解,對於sighandler_t signal(int signo, sighandler_t handler);你只需要瞭解sighandler_t的型別(即typedef void (*sighandler_t)(int);),就可以理解signal函式的完整原型宣告。

本文出自 「小麥」 部落格

3樓:國迎彤澄春

選a,陣列str中只有'\n'這個字元。

b是給2維陣列賦值的。

c,d表示法都是錯的。

c語言中char(*pc)[5]是什麼意思

4樓:阿嚦噶禱

pc是一個指標

該指標指向一個陣列

該陣列內容為5個char型字元

5樓:匿名使用者

定義一個陣列指標

c語言中char*alpha[5]的含義

6樓:匿名使用者

定義一個長度是5的字元字元指標的陣列。

也就是陣列alpha的每一個元素都是一個字元的指標(char *).

如下:char a[10];

alpha[0] = a; //將陣列a的地址賦值給字元指標alpha[0].

7樓:匿名使用者

定義一個指向陣列的指標

即指標陣列

陣列中有5個元素

指標指向第一個元素的首地址

8樓:匿名使用者

定義了一個陣列,陣列的元素為char型別的指標

9樓:匿名使用者

char alph是一個字元變數,加上*,是指標變數,指標指向陣列a的首地址,陣列a有五個元素,zh總稱ahph指向字元陣列a的指標變數.

c語言中char * a=(char *)_a什麼意思?

10樓:刁煊胥歆然

定義一個儲存char型變數地址的指標q,並把變數a的地址儲存到q指標中

此時q中儲存的是&a(即a在記憶體中地址)

如果在程式中出現(並不是最開始的定義指標時)的*q則表示q指標中儲存的地址所指向的變數,

在你定義的這個中*q就等於a

11樓:宓靖善密

在c語言中,char*

q=a;定義一個指向字元型別的指標q,並將它初始化為a。

這裡a一般應該是一個地址,通過*q我們就可以訪問a處記憶體的值。

示例程式如下:

#include

int main(int argc, char* argv)編譯後的執行結果如下圖所示:

12樓:李瓊範

這裡是要注意一個引數的問題,引數分為:形參與實參形參就是形式引數,也就是函式定義中的引數

實參就是實際引數,也就是函式呼叫中的引數

如int a(int a, char * b){}上面的函式定義中,函式定義括號中的引數a與b就是形式引數,也就是形參而當你在呼叫這個函式時,這個引數就是實際引數如:

int d = 32;

char * s = "hello josin";

//注意下面的函式呼叫:

a(d, s);

此時函式a的引數中d與s就是實際引數。也就是實際傳遞給函式的引數。

13樓:匿名使用者

_a是形參,因為前面有const修飾所以在子函式中,_a是不能被修改的,

所以要處理_a中的資料就要將_a的值賦給子函式裡的變數,使用這個變數來對_a中的資料進行運算,其他指標之類不用再講了吧,這裡面有個指標做形參和普通變數做形參的區別,你要了解這個區別,這個就很容易懂了。

14樓:天雲一號

char *a = (char *)_a;  // 表示將變數_a進行強制型別轉換為char *型別

比如:char _a;

char *a = (char *)_a;  // 就是將char型別的變數_a轉換為char *型別,並賦值給*a

15樓:檢言尉遲月明

從這個式子可以判斷a

也為指向字元型的指標,所以式子的意思是

定義一個指向字元型的指標q,並把它初始化為a,即此時q,a指向相同的字元變數

16樓:認不倒你

const void* _a // _a是一個const void *型別的變數

c語言y=++(x+5)為什麼是不成立的 解釋一下

17樓:匿名使用者

&(x + 5)

也就是說,(x + 5) 不在記憶體中,所以沒有地址。

建議改為:

y = (x + 5, ++ x);

18樓:匿名使用者

(x+5)是算式,不能用++

~~~~~~~~

c語言定義char **p;p=(char *)malloc(sizeof(char)*5);p是什麼?

19樓:匿名使用者

char **p;定義一個二維指標

p=(char **)malloc(sizeof(char*) *5); 先分配行空間

for( i=0;i<5;i++ )

p[i]=(char *)malloc(sizeof(char)*15); 再分配每一行的空間

這樣才正確

20樓:左灬王

堆指標 **p是堆指標的地址

char*(*a[5])(void*(b[10])(char **c));誰能給我解釋下..

21樓:上帝來自地球

我給你簡化一下

1.typedef char **ppch;

2.typedef void *(vapfunc[10])(ppch y);

3.typedef char *(*t)(vapfunc x);

從而題目可簡寫為:

t a[4];

現在應該很清楚了吧,呵呵

詳細解釋,就是:

a是一個指標陣列,指標的型別是t,t所指向(返回型別為char *,形式引數型別為vapfunc的函式);

c語言題目,用中文解釋一下,比如x=y=5,x++*x++和--y*--y分別等於多少?

22樓:安僧

我剛打了;如果是x++後邏輯運算是直接乘法後加一,所以x++*x++=27;

但++x是前邏輯運算,所以++x*++x=49;

其次++x*x或x*x++才=36;

23樓:匿名使用者

x=y=5, 這句完了之後x=5,y=5

x++*x++ 第一個x還是5,第二個x是6,所以這個表示式的值是30

--y*--y 第一個y是4,第二個是3,所以這個表示式的值是12

24樓:匿名使用者

x++之後,x為6,兩個6相乘,我就不說答案了,同理,後面的--y,y自減兩次所以y=3,兩個3相乘的答案我也不說了,希望能幫到你,不要只看表面,而不去實踐,這句話我是對2樓的同志說的,,,

25樓:匿名使用者

x++ x-- 記住是使是後加減

++x --x 是加或減後使用的

26樓:匿名使用者

有用vc試驗麼,試驗結果是25 9

彙編結果太長,貼不了:先乘再++,先--再乘。

幫忙解釋答下c語言for迴圈執行的順序

兩個for在一起一般用作雙重迴圈,你寫的這個我看不太明白你的意思,感覺有點像順序結構 你可以寫個例子下來嗎 c語言 for迴圈執行步驟 簡單的for迴圈程式如下 for int i 0 i 20 i 執行步驟是 1 i 0 初始化初值 2 進行條件專判斷i是否 20,如果條屬件為真,則繼續執行 3 ...

誰能解釋下這條語句的含義(c語言)

設n n的最左邊數字是a,則必然存在不等式a 10 p n n a 1 10 p對不等式中的各項取以10為底的對數,得到 p lga nlgn p lg a 1 所以lga nlgn p 因為a是個一位數,所以0 lga 1,因此p就是nlgn取下整,所以 lga nlgn nlgn 這裡的表示取下...

求大神幫忙解釋一下這個c語言的意思以及輸出結果

這段 bai的意思 是已知三角du形兩條邊,求出來zhi三條邊的邊長。程式dao 執行後的輸出回 結果為 答three sides of the are 3.00,4.00,5.00 其實這段 的意思應該只適用於直角三角形,勾三股四弦五,其輸出的英文描述中應該增加直角的定語對三角形進行限定,修改為應...