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;

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536578.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536578.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536578.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c語言程序設計課程設計學生信息管理系統,C語言程序設計課程設計報告----學生信息管理系統.doc...

河南理工大學計算機學院《C語言程序設計》課程設計報告題目: 學生信息管理系統專業: 計算機科學與技術班級: 計算機XX班學號: 311009033232姓名: *****日期:2012年3月21日1.2意義熟悉C語言程序的編程環境、…

【轉】利用python的KMeans和PCA包實現聚類算法

轉自:https://www.cnblogs.com/yjd_hycf_space/p/7094005.html 題目: 通過給出的駕駛員行為數據(trip.csv),對駕駛員不同時段的駕駛類型進行聚類,聚成普通駕駛類型,激進類型和超冷靜型3類 。 利用Python的s…

c 語言str.size,C/C++ strlen(str)和str.length()和str.size()的區別

strlen(str)和str.length()和str.size()都可以求字符串長度,返回字符串中字符的長度,不包括‘/0’。其中str.length()和str.size()是同義詞,返回同樣的值。strlen(str)是用于求字符數組的長度,其參數是char*。#include #include using namesp…

想跑次高頻策略?快來看看Numpy處理真格量化tick數據的技巧

使用澎博真格量化時,很多用戶希望用numpy處理tick數據,包括tick數據的留存和運算。 這里有一些技巧。 因為tick數據量比較大,為了降低系統的運算負擔,我們不應該在內存里保存大量tick數據。 比如我們只想保存過去10個tick。 可以在…

if語句寫階躍函數C語言,C語言第四章分支語句.ppt

C語言第四章分支語句.ppt例: 輸入三個實數,按從小到大的順序輸出。 main( ) {float a,b,c,t; scanf(“%f,%f,%f ”,&a,&b,&c); if (a>b) { ta; ab; bt; } if (a>c) { ta; ac; ct; } if (b>c) { tb; bc; ct; } printf(“%5.2f,%5.2f…

日本顯示屏巨頭JDI不敵業務壓力,宣布接受中方注資...

本次10億美元的融資金額中,其中7.2億美元據傳來自中國絲綢之路基金。 最初,在液晶領域日本企業一直都占據著主要市場,如夏普、NEC、東芝等。后來隨著韓國三星、LG的強勢進入,日本企業的生存空間開始被搶占,現如今中國…

c語言中 d 1是啥意思,空開D/C是什么意思?終于有人把它說清楚了!

原標題:空開D/C是什么意思?終于有人把它說清楚了!空氣開關是每個人家里必用的東西,但是你到五金店一看,大大小小的開關插座多了去,讓人眼花繚亂。怎么選呢?空開有各種字母型號,這些字…

微信小程序開發 | 官方問答精選

2019獨角獸企業重金招聘Python工程師標準>>> SF問答精選《七》 多組件顯示與隱藏如何實現、function中的...SF問答精選《六》canvas不顯示問題SF問答精選《五》菜單內容左右聯動、生命周期函數SF問答精選《四》eslint 配置使用 co function;apache 反向代…

36歲自學C語言,C語言的數據類型

在C語言中,數據類型可以分為:基本數據類型,構造數據類型,指針類型,空類型四大類。基本數據類型基本數據類型最主要的特點是,其值不可以再分解為其他類型。也就是說,基本數據類型是自我說明。構造…

清北學堂培訓2019.4.4

第一次培訓,心情有點激動(盡管沒了清明節),還見到了各地的dalao們,十分開森 Day 1(李昊dalao) 上午篇 上午呢,主要講了關于高精,快速冪,膜模意義下的運算&…

國二c語言作弊用u盤,計算機等級考試可以插u盤嗎(全國計算機等級考試報名系統官網)...

:不可以 會有嘀嘀嘀的報警聲的:我以前考時不讓帶的,人家讓你不能用優盤的話電腦會控制沒法用的。:首先肯定回你,不可以帶優盤或者其他作弊設備。很多計算機二級考點會把主機箱鎖死,根本插不了優盤。在你進入…

「SCOI2011」棘手的操作

傳送門 Description 有\(N\)個節點,標號從\(1\)到\(N\),這\(N\)個節點一開始相互不連通。第$ i\(個節點的初始權值為\)a_i$ ,接下來有如下一些操作: U x y 加一條邊,連接第 \(x\) 個節點和第\(y\) 個節點。 A1 x v 將…

swft c 語言 數組,如何在swift中實現數組的深拷貝

在Objective-C中如果想將一個數組賦值給另外一個數組,同時想讓兩個數組之間相互獨立(即改變其中的一個數組,不影響另外的一個),有很多的辦法,比如我們可以直接copy,用類方法創建新數組。這樣得到的數組和原來的數組就是兩個完全獨…

tomcat CATALINA_HOME與CATALINA_BASE的區別

區別 https://blog.csdn.net/cfydaniel/article/details/41351927 Tomcat啟動分析(我們為什么要配置CATALINA_HOME環境變量) http://www.cnblogs.com/heshan664754022/archive/2013/03/27/2984357.html轉載于:https://www.cnblogs.com/Andrew520/p/10664921.html

android 廣告欄效果,實現android廣告欄效果

public classBannerLayout extendsRelativeLayout {privateViewPager mViewPager; // 輪播容器// 指示器(圓點)容器privateLinearLayout indicatorContainer;privateDrawable unSelectedDrawable;privateDrawable selectedDrawable;private intWHAT_AUTO_PLAY 1000;private boo…

自我練習

<!doctype html><html><head><meta charset"utf-8"><title>無標題文檔</title><link rel"icon" href"../HTMLWork/day03/psb.ico.ico" type"img/*"></head><body> <a na…

android studio按鈕槽函數,AndroidStudio按鈕Button退出程序

AndroidStudio 3.1.41.創建一個新的項目&#xff0c;項目名稱為Button&#xff0c;界面為activity_button.xml2.打開activity_button.xml3.點擊HelloWorld標簽&#xff0c;按Delete刪除4.左側組件欄選擇Common - Button5.將Button組件拖到界面上&#xff0c;大概中間的位置6.右…

cobbler介紹與部署

cobbler介紹 Cobbler是一個Linux系統安裝的服務&#xff0c;可以通過網絡啟動(PXE)的方式來快速安裝、重裝物理服務器和虛擬機&#xff0c;同時還可以管理DHCP&#xff0c;DNS等。 Cobbler可以使用命令行方式管理&#xff0c;也提供了基于Web的界面管理工具(cobbler-web)&#…

android wifi視頻監控軟件,WiFi環境下Android智能視頻監控系統研究與實現

摘要&#xff1a;在互聯網飛速發展和移動互聯網強勢崛起的時代,科技產品服務于普通生活是新興行業必然的發展趨勢;監控系統是物聯網時代各個領域必然爭取的可控制系統。隨著無線技術和移動終端設備的高歌猛進,移動終端智能無線視頻監控系統成為時下監控領域發展的熱點方向。無線…

android 本地地址轉換為url,android本地mipmap圖片轉url、絕對路徑轉URL URL URI File Path 轉換...

標簽&#xff1a; url uri file pathFile to URI:File file ...;URI uri file.toURI();File to URL:File file ...;URL url file.toURI().URL();URL to File:URL url ...;File file new Path(url.getPath()).toFile();URI to URL:URI uri ...;URL url uri.toURL();URL …