C代碼!學習

1. 怎樣建立和理解非常複雜的聲明?例如定義一個包含N 個指向返回指向字符的指針的函數的指針的數組?
這個問題至少有以下3 種答案:
1. char *(*(*a[N])())();
2. 用typedef 逐步完成聲明:
typedef char *pc;  /* 字符指針*/
typedef pc fpc(); /* 返回字符指針的函數*/
typedef fpc *pfpc; /* 上面函數的指針*/
typedef pfpc fpfpc(); /* 返回函數指針的函數*/
typedef fpfpc *pfpfpc; /* 上面函數的指針*/
pfpfpc a[N]; /* 上面指針的數組*/

 

 

2. *p++ 自增p 還是p 所指向的變量?
後綴++ 和-- 操作符本質上比前綴一目操作的優先級高, 因此*p++ 和*(p++) 等價, 它自增p 並返回p 自增之前所指向的值。要自增p 指向的值, 使用(*p)++, 如果副作用的順序無關緊要也可以使用++*p。

拓展:

輸出:

result :5

原因:棧是向低地址擴展的數據結構!

 

3.怎樣判斷機器的字節順序是高字節在前還是低字節在前?
有個使用指針的方法:
int x = 1;
if(*(char *)&x == 1)
printf("little-endian/n");
else
printf("big-endian/n");

 

4. 四捨五入小數點後第3位:

 int m;
 float n;
 m = 12.315*100+0.5;
 n=m/100.0;

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章