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 其實這段 的意思應該只適用於直角三角形,勾三股四弦五,其輸出的英文描述中應該增加直角的定語對三角形進行限定,修改為應...