c++ new的用法 C語言指針到底是什么,該怎么用呢?
C語言指針到底是什么,該怎么用呢?在C語言中,我們可以認為指針是地址,但是是特定內存單元的地址。如果我們在C語言中定義一個int變量a:int a;那么計算機將分配一個4字節(jié)的地址(在VC中,在某些C
C語言指針到底是什么,該怎么用呢?
在C語言中,我們可以認為指針是地址,但是是特定內存單元的地址。
如果我們在C語言中定義一個int變量a:
int a;
那么計算機將分配一個4字節(jié)的地址(在VC中,在某些C語言版本中,它可能是2字節(jié))來存儲a的值。由于內存中的每個字節(jié)都有一個地址,哪個地址是a的地址?我們不能用四個地址同時表示a的地址,所以在C語言中,我們把這個空間的第一個字節(jié)(四個字節(jié))的地址作為變量a的地址,也就是第一個地址。
然后我們定義一個指針變量,例如:
int*p;
然后使用address操作符獲取a的第一個地址并將其分配給指針變量p,例如:
p=&A;
現在a的地址存儲在指針變量p中,我們稱p為a的指針。
C語言能干什么?
我已經在C上工作了六年,并且我覺得這個領域的需求還是很大的
第一,嵌入式設備:幾乎所有的硬件設備都離不開C,手機和Android設備都是Linux內核,純C,硬件都是驅動的,都是C,單片機,數據機。
第二,網絡設備:各種網絡設備、光纖設備、交換機、防火墻、小型家庭路由器、TCP/IP協議都是用C語言編寫的,C語言的需求和網絡的發(fā)展空間一樣大。
第三,服務器端:大部分服務器端程序都是C,精通nginx和squid,可以使公司上市,如Netshop技術。云服務離不開C。亞馬遜,業(yè)界最強大的云,不能靠買書來做這么多。還有流行的大數據、IPv6等,涉及的業(yè)務非常廣泛。很多工具都是用C寫的,比如PHP,python…
但是C不是那么簡單,不僅僅是語法,比如Linux驅動程序,你應該熟悉內核架構,并且有一些硬件知識。C有很多開源代碼要看。簡而言之,指針是表示地址的無符號整數。
所以僅僅理解指針是不夠的。您還需要知道指針指向的數據空間是如何排列的。這可能涉及到一些與特定CPU/OS相關的知識。如果我們能用計算機體系結構的知識來理解它,它會更深刻、更準確。
例如:
如何存儲float/double/long double?
如何在數據空間中組織陣列?
字符串是如何存儲的?
如何存儲結構和聯合體?
位域組織
具體CPU相關部分如下:
整數的存儲將涉及CPU大小的指定
浮點數的存儲直接關系到FPU的設計
此外,還有一些擴展知識,涉及內存的分配和釋放:如何在程序中分配內存?(malloc/free)
什么是堆和堆棧?
總而言之:指針是地址和整數。但要充分利用它,我們需要了解計算機存儲空間的分配。困難在這里,突破在這里。