日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言巩固,巩固一下C语言中的指针

發布時間:2025/3/8 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言巩固,巩固一下C语言中的指针 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫了幾段代碼,再鞏固一下C語言知識。

我的記憶方法跟文章中的不一樣。

*是取值符號,&取地址符號,()限定子表達式的符號,[]是按索引取數組乘員的符號。

優先級方面()>[]>*,&。

對于int *(*p(int))[3]; 。我是這么分析的:

int *(*p(int))[3]=>int *p1[3]:等價于 int *p1[3]

1、表示取p1里的某個元素是int指針,那么p1是一個數組,里面的東西全部是指針

p1=>*p2,p2=>p(int)

2、表示取了p2的值才是p1,顯然p2也是指針(指向數組的指針);p2等效于一個函數調用,那么p一個函數

整個表達式相當于一個函數聲明,返回值是指針,指向的是數組,數組的乘員又是指針。編譯之后不會產生任何代碼。如果要寫fuck brain的代碼可以用這種方式寫函數聲明頭文件,把別人繞暈。

這里要特別注意返回的是指針,所以符合語法規則。如果把這個函數的返回值typedef成一個類型,那么就較容易理解了。

如果要寫這種繞腦的代碼,最好typedef一下:typedef int* (*int_array_ptr)[3];。

下面是隨便寫的一段代碼,驗證一下這個問題。

typedef int* (*int_array_ptr)[3];//這里必須要指定長度,sizeof(int_array_ptr)才知道長度

typedef int* int_array [];

typedef int* (*func_ptr)(int);

typedef int func_type(int);

int* TestFunc(int a)

{

printf("TestFunc

");

return 0;

}

int** TestFunc2(int a)

{

printf("TestFunc2

");

return NULL;

}

int func2(int a)

{

printf("func2

");

return NULL;

}

int main()

{

int *(*ps1(int))[3];

int *(*(ps2(int)))[3];

int a = 1;

int *b = &a;

int *c = &*b;

int d = *&a;

printf("a=%d

", a);

printf("*b=%d

", *b);

printf("*c=%d

", *c);

printf("d=%d

", d);

//int **(ps3(int))[3];

//int ** ps4(int)[3];

int_array_ptr ps5(int);//函數聲明

//int *((*ps)(int))[3];

//int* (*p)(int)[3];

func_ptr func[3];//數組聲明,數組的成員是函數指針

func_type func2;//函數聲明

int size = sizeof(func_type*);

int size = sizeof(func_type);//語法錯誤,對一個函數使用sizeof不成立

func2(3);//只有有實現的函數才能調用,如果把func2的實現刪除,編譯會報找不到符號

//printf("ps1=%X

", &ps1);//函數沒有實現,所以ps1不存在,編譯報找不到符號

//printf("ps2=%X

", &ps2);//

printf("funcptr=%X

", func);

printf("funcarrayptr=%X

", &func);

printf("func2ptr=%X

", &func2);

//memcpy(&func2,&TestFunc2,4);//不能修改代碼段的數據,執行報錯,&func2指向程序代碼段中的地址,

//一個程序平坦的內存被劃分為代碼段、數據段

//p = func[0];

return 0;

}

總結

以上是生活随笔為你收集整理的c语言巩固,巩固一下C语言中的指针的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。