1樓:上帝來自地球
我給你簡化一下
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語言,解釋下 char(*(*x()[5])() 的意思
2樓:匿名使用者
從內向外分析:
*x() : x是一個無引數函式,該函式返回一個指標*(*x())[5] : 由於c語言宣告的優先順序規則是字尾優先於字首,所以這裡就要先考慮後面的[5],再看前面的星號,於是得出:
x是一個無參函式,該函式返回一個指標,返回的這個指標指向一個有5個指標元素的陣列。
char(*(*x())[5])() : 依然先看字尾得知這是個函式,而且沒有引數,再看字首,結合字尾可知這是一個返回值型別為char的函式,再結合對*(*x())[5]的分析得出最後結論:
x是一個無引數函式,該函式返回一個指標,返回的這個指標指向一個有5個指標元素的陣列,該陣列的每個元素都可指向一個返回值型別是char的元素函式。
3樓:匿名使用者
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函式的完整原型宣告。
本文出自 「小麥」 部落格
4樓:國迎彤澄春
選a,陣列str中只有'\n'這個字元。
b是給2維陣列賦值的。
c,d表示法都是錯的。
c語言中char * a=(char *)_a什麼意思?
5樓:刁煊胥歆然
定義一個儲存char型變數地址的指標q,並把變數a的地址儲存到q指標中
此時q中儲存的是&a(即a在記憶體中地址)
如果在程式中出現(並不是最開始的定義指標時)的*q則表示q指標中儲存的地址所指向的變數,
在你定義的這個中*q就等於a
6樓:宓靖善密
在c語言中,char*
q=a;定義一個指向字元型別的指標q,並將它初始化為a。
這裡a一般應該是一個地址,通過*q我們就可以訪問a處記憶體的值。
示例程式如下:
#include
int main(int argc, char* argv)編譯後的執行結果如下圖所示:
7樓:李瓊範
這裡是要注意一個引數的問題,引數分為:形參與實參形參就是形式引數,也就是函式定義中的引數
實參就是實際引數,也就是函式呼叫中的引數
如int a(int a, char * b){}上面的函式定義中,函式定義括號中的引數a與b就是形式引數,也就是形參而當你在呼叫這個函式時,這個引數就是實際引數如:
int d = 32;
char * s = "hello josin";
//注意下面的函式呼叫:
a(d, s);
此時函式a的引數中d與s就是實際引數。也就是實際傳遞給函式的引數。
8樓:匿名使用者
_a是形參,因為前面有const修飾所以在子函式中,_a是不能被修改的,
所以要處理_a中的資料就要將_a的值賦給子函式裡的變數,使用這個變數來對_a中的資料進行運算,其他指標之類不用再講了吧,這裡面有個指標做形參和普通變數做形參的區別,你要了解這個區別,這個就很容易懂了。
9樓:天雲一號
char *a = (char *)_a; // 表示將變數_a進行強制型別轉換為char *型別
比如:char _a;
char *a = (char *)_a; // 就是將char型別的變數_a轉換為char *型別,並賦值給*a
10樓:檢言尉遲月明
從這個式子可以判斷a
也為指向字元型的指標,所以式子的意思是
定義一個指向字元型的指標q,並把它初始化為a,即此時q,a指向相同的字元變數
11樓:認不倒你
const void* _a // _a是一個const void *型別的變數
c語言中、char (*pa)[5];和char *pa[5]有什麼區別
12樓:匿名使用者
指標陣列:int *pa[5]; //它是五個指標。這五個指標組成一個陣列
陣列指標:int (*pa)[5]; // pa是一個指標變數。它指向一個有四個陣列 void main()
b[strlen(a)]='\0';printf("%s\n",b);}
13樓:匿名使用者
pa=&a;實際上是將指標a的地址賦給了pa,或者說是將指標的指標賦給了pa
14樓:匿名使用者
char (*pa)[5];不是定義指標陣列,是用來定義指向一組陣列的指標變數char *pa[5]才是定義指標陣列
c語言中函式形參是char (*a)[10],這是什麼意思??求教各位,謝謝! 5
15樓:匿名使用者
char(*a)[10] 說明該引數是一個陣列指標,該指標指向一個包含10個元素的陣列.
判斷方法: 注意優先順序, 的優先順序高於*,而()可用來強行優先.
char(*a)[10] 首先由*a知道這是一個指標,再有知道該指標指向的是陣列.
如果是char *a[10]
則首先由 知道這是一個陣列,再有char *知道這個陣列的內容是指標.
16樓:匿名使用者
char s[5][10];
char (*a)[10]=s; //這個表示a是指向一行有10個字元的行指標。a的型別與s一致,因此這兒可以賦值。
17樓:匿名使用者
那個是行指標。。。
舉個例子。。。
char str[3][10];
char (*a)[10];
str=a;
a指向str[0]的頭元素。。即str[0][0],a+1指向str[1]的頭元素。。。即str[1][0],以此類推。。。
話說指標的概念挺難的。。要好好琢磨。。。
18樓:
首先離a最近的的是×,所以a是一個指標
a指向的資料型別是char p[10]
a是一個指向有十個元素的char陣列的指標
19樓:asdf聽濤
char表示行指標所指一維陣列的資料型別,*表示其後變數是指標型別;10表示行指標所指一維陣列長度是10;
若有定義:char *a,b[5]; a=(char*)malloc(80);則正確的是(c)
20樓:深深深子
a 是不對的,因為*a是指標a指向的值,scanf需要第二個引數是某地址。
b 也不對,b是一個char型陣列,所以b是這個陣列的首地址(char [5]型的),作為一個陣列,它的首地址是不能改變的,所以這樣是不對的。d也是因為這樣。
c 是對的,"good"作為一個字串,他在記憶體裡是有5個記憶體單元儲存的,地址的第一個記憶體單元的地址,因此你可以認為一個字串代表一個地址,這裡是把"good"的地付給a,而a和b的區別在於,a是一個指標,剛好可以儲存字串的地址,所以c對。
另外,這樣記憶體會洩露,因為malloc沒有被free。
21樓:匿名使用者
mallco開闢80個位元組,字元型別的儲存空間給指標變數a指向,a="good";說明a存字串的地址。
22樓:羅門大佬
根據2樓分析外,d也不對,b【5】只能存4個字元
void fun (char *,char *b){a=b; (*a)++}
23樓:
call fun(p1, p2) ->fun(char *a, char *b) // 此時a是c1的地址,b是c2的地址
a = b; // 此時a是c2的地址(*a)++; // 把c2地址的內容加1
上面沒有對c1地址的內容進行任何修改,所以 c1內容沒變,c2內容加1
24樓:匿名使用者
void fun (char *,char *b)這個函式其實是這樣的
void fun (char *a, char *b)並沒有改變指標a指向的內容。所以c1還是a
c語言中char*alpha[5]的含義
25樓:匿名使用者
定義一個長度是5的字元字元指標的陣列。
也就是陣列alpha的每一個元素都是一個字元的指標(char *).
如下:char a[10];
alpha[0] = a; //將陣列a的地址賦值給字元指標alpha[0].
誰能給我解釋一下這是什麼原理,誰能給我解釋一下這是什麼原理
這個原理很簡 抄單,實驗方法也多,我推薦襲一種 首先跑馬bai燈的原理不知道你是否du清楚,主要通過zhi控制輸出訊號的dao 延時,達到逐一電亮燈泡的原理.通俗點講 假設你用4個開關控制4個燈,叫4個人按照順序每過0.5s 點亮一盞燈,這樣燈就跑起來了 我們都用程式控制,這樣時間可以控制的更短.你...
誰能給我提些建議,誰能給我提些建議? 10
鬱郁周 是哦是哦,有點老套 語言挺好的,感覺和哪個作家相似來著.誰能給我提點建議 200 遠離城市喧囂 去看了一下,首先標題就不是很吸引人。其次感覺怎麼說呢,內容比較單 一 可讀性不是很強,比如有很多是歌詞分享堆砌起來的一篇文章,讓人沒有讀的慾望。然後互動性也不強,不會讓人產生互動的衝動。題主加油噢...
誰能給我解釋解釋什麼叫愛
我只要你我只要你,我只要你好好的就夠了 只要你好好的,我做什麼都值得 你難過,我也一樣會難過 你心痛 我也一樣會心痛 你受了委屈 我也一樣會覺得很委屈 你過得不好,我也一樣不會好受 但是 你開心,我會比誰都開心。如果你真的愛她就不會覺得自己像狗一樣活著,愛是不求回報的,囎 人之立世,所冀者何,常躬思...