摘要:多維數組本質上和一維數組沒區別,他的維數僅僅只是作為比例因子和偏移,拿來計算地址偏移用的,但是多級指針用數組訪問的時候,他的維數僅僅只做偏移用,他的過程是加偏移,解引用,加偏移,解引用。。。。
c語言中規定類型這樣一個事情,主要是出于一個怎樣的原因呢?
char short int long long longfloatdouble
常規主要的類型,就是上面的幾種類型
char? ????????類型常用于存儲字符數據,數據寬度為8bit,唉?一個英文字符也是八個bit位就能存下,好像他這個設計很合理啊,但是呢,其實我們深究一下,他是不合理的,為啥呢,主要從兩方面來說明問題,在32位的pc機前提下討論。
1.你使用char類型在進行參數傳遞的時候,它實際還是按4字節傳遞的,最主要的原因是為了適應本機寬度的問題
2.對齊問題,我們所討論的對齊,都是要基于硬件的,硬件不支持的話一切都是扯,那么char類型的對齊方式是按1字節對齊的,好像計算機也是最小訪問一字節哈,但是問題就出在這里,cpu的最小對齊單位是word,也就是雙字,那就意味著,一字節的對齊方式,只是cpu為我們做了適當的處理
當然,要出也是有的,就旦旦只是節省內存,經此而已。
float 也會默認轉成 double 主要原因,一個是精度,一個是本機寬度
其他的幾個類型,就不再贅述了,相信你已經悟到了!
c語言中有有符號無符號的這種說法,好像對于我們的認知來說數確實是有正負的問題哈,很合理哈,但是問題就出在這里了,計算機怎么知道你是有符號還是無符號??計算機做加減法都僅僅只是做與或非操作而已,它并不能判斷你的數究竟有無符號,0xFFFFFFFF你能說他是正數還是負數??0xFFFFFFFF 與0x12345678你能直接說他誰大誰小??這都是無法確定的,因為我無法確定你是把高位當符號位看還是不當符號位看,同樣計算機也是無法確定,那么在cpu的角度來說,0xFFFFFFFF -?0x12345678究竟結果是正是負?無法確定,所以cpu把他即當無符號數也當有符號數,按無符號數的運算結果設置CF位,按有符號數的結果設置OF位,這下應該清楚為啥會有符號的說法了吧,其目的就是要讓編譯器能夠準確無誤的選擇是使用根據OF位的進行操作的匯編指令,還是選擇是使用根據CF位的進行操作的匯編指令,總結,c語言的符號設計是讓程序員顯示指導,消除歧義。
他這個設計又是為了什么呢??說白了就是為了確定兩個事情,一個就是轉換數據寬度,一個就是轉換步長,轉換數據寬度就不再贅述了,轉換步長
int *A;int *B;int *C;
現在又三個指針變量,那么他們現在的步長都是4個字節,現在我想讓他每次的步長是兩個字節,那么可以把他轉換成 short* 類型,或者轉換從(char (*)[2])類型,都是可以的,這個就是強轉的意義
char * szp = “ABCDEF”;char szArr[] = "Hello World";
好像他倆沒啥區別嚯,
char * szp = “ABCDEF”;char szArr[] = "Hello World";//好像指針也可以通過數組的形式訪問szp[i];//好像數組也可以通過指針的形式訪問*(szArr + i);
這事怕也也干的多了,好像也沒啥問題,多級指針和多維數組好像也沒有問題哈,確實一維數組和一級指針在這樣的兩種訪問方式下確實是等價的,但是問題就出現在了多維數組和多級指針上
int***p;//用數組訪問p[i][j][k];----------------------int Arr[i][j][k];//用指針的形式訪問*(*(*(Arr + m) +n) + v);
好像是我們平時這么使用是沒啥問題哈,但是其實是他的本質已經發生變化了,事先說明一下。多維數組本質上和一維數組沒區別,他的維數僅僅只是作為比例因子和偏移,拿來計算地址偏移用的,但是多級指針用數組訪問的時候,他的維數僅僅只做偏移用,他的過程是加偏移,解引用,加偏移,解引用。。。。而數組以指針方式訪問的時候,他的本質其實還是比例因子加偏移,他的 * 取值操作符,壓根就沒有取值,僅僅只是給你看看,讓你比如那么慌,讓你更好理解你所訪問的值是哪個,僅此而已。
本人水平有限,有錯的地方希望各位大佬指正;
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/121135.html
Python在什么時候會生成pyc文件呢? ??事情大概是這樣的,之前我一直以為python文件在執行過之后就會生成pyc文件,后來一次偶然情況下,發現還是自己too young too simple,在看過其他大神文章并且自己驗證之后,發現還是有點意思的,權當沒事寫點文章吧。 什么是pyc文件呢? ??簡單來說,pyc文件就是Python的字節碼文件,我們都知道Python是一種全平臺的解釋性語...
摘要:啟動項目,驗證進入到項目中的中的方法的類中,在方法上點擊啟動啟動報錯,查看報錯原因分析問題原因說明端口被占用了。解決方法修改的端口號,或者將端口的應用的端口號修改了。再次啟動項目啟動成功,驗證項目,驗證成功 1.創建項目 打開IDEA,File->New->ProjectshowImg(https://segmentfault.com/img/bV22nr?w=523&h=225); ...
摘要:在本文的例子中,你將使用和創建一個功能型集群。第二步啟動你的服務是集群的服務。這可能需要一些時間來拉取鏡像并啟動。注將含有到的超鏈接。這些鏈接是不能正常工作的鏈接將嘗試連接到集群,而不會自動代理的集群。快速使用使用連接到驅動并運行。 在本文的例子中,你將使用 Kubernetes 和 Docker 創建一個功能型Apache Spark集群。 你將使用Spark standalone模...
閱讀 1223·2021-11-25 09:43
閱讀 1337·2021-09-26 09:55
閱讀 2330·2021-09-10 11:20
閱讀 3365·2019-08-30 15:55
閱讀 1441·2019-08-29 13:58
閱讀 1163·2019-08-29 12:36
閱讀 2337·2019-08-29 11:18
閱讀 3407·2019-08-26 11:47