本文目錄一覽:
c語言指針嵌套問題
int **p=a
這個是把int *型賦值給int **型。 本身類型就不匹配。
然後 *p=a 相當於把數組a的首地址 賦值給*p 也就是a[0]
這個等效於 把a的首地址 賦值給了a的第一個元素。即 a[0] = (int )a;
之後輸出**p = a[0] 這裡會輸出a的首地址值。
至於後續的 *p=b 輸出*p值會是2.
c語言中函數指針作為參數與函數的嵌套
您好,針對這個問題
Status
InOrderTraverse(BiTree
T
,Status(*Visit)(TElemType
e))函數中第2個參數是一個指向函數的指針,這樣做的目的是為了程序的靈活性。試想如果給你一個整型數100,要求分別按照10進行、16進制輸出,你可以寫一個輸出10進制函數與輸出16進制函數,當你有需要輸出16進制時,只需要將16進制函數地址傳給Visit就行,而不需要改變InOrderTraverse函數,這種做法靈活,也符合軟件工程編程思想。
另外,InitStack(S);
就是函數調用,這種就在InOrderTraverse已經寫死了,如果有幾種初始化情況的話,就得在InOrderTraverse增加判斷條件來加以區分,這樣增加了代碼量。
希望我的回答對您幫助!
C語言如何對位操作?有哪些方法 對多於一層的指針嵌套 如何處理
不知道你是不是指我下面說的意思~~
有兩種方法:
第一,使用位操作:舉例來說吧,
int main()
{
int i;
unsigned char iTest[16];//定義這16個位元組
//printf(“%d\n”,sizeof(unsigned char));//驗證unsigned char為單位元組
memset(iTest,0,16);//初始化所有位所有位元組為0
for(i=0;i16;i++)//寫點測試數據
{
iTest[i] = 1(i 7);//將第i個位元組(從0起計)的第(i%8)位上賦為1
//printf(“%X\n”,iTest[i]);//檢驗一下結果
}
//現在假設要更改第3個位元組第5位的值
printf(“%X\n”,iTest[2]);//先檢驗一下現在的值,應該為0000 0100
iTest[2] ^= 0x20;//即與0010 0000做異或運算
printf(“%X\n”,iTest[2]);//檢驗更改的結果,應該為0010 0100
//除了取反外,還有置0和置1
printf(“%X\n”,iTest[3]);
iTest[3] = 0xf7;//即將iTest[3]的第3位置0,結果為0000 0000
printf(“%X\n”,iTest[3]);
iTest[3] |= 0x08;
printf(“%X\n”,iTest[3]);
//如果需要一次操作好幾位,比如要使第11個位元組的0-4位取反
printf(“%X\n”,iTest[11]);//當前是0000 1000
iTest[11] ^= 0x1f;//即與0001 1111做異或運算
printf(“%X\n”,iTest[11]);//結果應該是0001 0111
}
關於以上提及的取反,置0,置1的操作可以封裝成宏,具體方法參見以下參考資料~~
第二,利用C的位域結構
struct Test
//將1個Byte用這個結構體表示
{
unsigned char b0:1;
unsigned char b1:1;
unsigned char b2:1;
unsigned char b3:1;
unsigned char b4:1;
unsigned char b5:1;
unsigned char b6:1;
unsigned char b7:1;
}BTest[16];
//之後無論進行單位操作,還是多位操作都可以直接以BTest[0].b0~=(=,|=,^=)這樣的形式來完成。
這個就不用寫例子了吧~~
參考下面這篇文章吧,雖然講的是單片機上的C應用~_~
原創文章,作者:GKCD,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/141786.html