真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C語言中指針的幾點注意-創(chuàng)新互聯(lián)

前言

    最近在看《C語言深度剖析》,發(fā)現(xiàn)里面的東西還是挺有用的,特別是以前腦海中C語言中一些不清晰的部分作者都一一指出了,對與深入學(xué)習(xí)C和找工作方面都有幫助。

目前創(chuàng)新互聯(lián)建站已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計、廣德網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

    今天要記錄一些指針方面的東西,包括數(shù)組名和數(shù)組名的地址,指針數(shù)組和數(shù)組指針,函數(shù)指針的用法。

組名和數(shù)組名的地址

    首先看一段代碼:

#include  int main() { 	int a[5]={0}; 	printf("sizeof(a):%d\nsizeof(&a):%d\nsizeof(&a[0]):%d\n",sizeof(a),sizeof(&a),sizeof(&a[0])); 	printf("a:0x%x\n&a:0x%x\n&a[0]:0x%x\n",a,&a,&a[0]); 	return 1; }


編譯運行結(jié)果:

C語言中指針的幾點注意

感覺還是蠻意外的,因為 a 和&a[0]的值是完全一樣的,都是數(shù)組首元素的地址,而&a感覺其值應(yīng)當是a的地址,運行結(jié)果卻是&a的值表示的也是數(shù)組首元素的地址。

有一句比較拗口的話,你對數(shù)組名取地址當然取到的是數(shù)組的地址,而不幸的是c又規(guī)定數(shù)組名的值就是數(shù)組地址。

對于sizeof,首先它不是函數(shù),它是一個操作符(operator)簡單的說其作用就是返回一個對象或者類型所占的內(nèi)存字節(jié)數(shù)。

在很多筆試題中都會考到sizeof一個struct,需要注意內(nèi)存對其。

還有就是sizeof數(shù)組名了,要注意數(shù)組名在sizeof的時候不退化為指針,所以sizeof的是整個數(shù)組的大小,5*4 = 20;

還要注意的是當數(shù)組名作為函數(shù)的參數(shù)進行傳遞的時候,數(shù)組就自動退化為同類型的指針。


指針數(shù)組和數(shù)組指針

首先看下面兩句:

	int *p1[10]; 	int (*p2)[10];

這倆一個是指針數(shù)組,一個是數(shù)組指針,怎么區(qū)分的,答案:看優(yōu)先級。

第一個,[ ] 的優(yōu)先級比 * 的優(yōu)先級大,所以是申明一個數(shù)組,這個數(shù)組的數(shù)據(jù)類型是 int *,其含有10個指向int類型數(shù)據(jù)的指針,所以這是一個指針數(shù)組。

第二個,括號優(yōu)先級大,所以是定義一個指針,指針指向的內(nèi)容是包含10個元素的數(shù)組,所以這是一個數(shù)組指針,注意,它是一個二級指針。

看一個例子:

#include  int main() { 	int *p1[10]; 	int (*p2)[10]; 	 	int a = 10; 	int b[2][10]={0}; 	p1[1] = &a; 	p2 = b; 	printf("*p1[1]:%d\np2[0][0]:%d\n",*p1[1],p2[0][0]); 	printf("%d,%d\n",sizeof(p1),sizeof(p2)); 	return 1; }

C語言中指針的幾點注意

理解了指針數(shù)組和數(shù)組指針的改面,上面的代碼也就明了了。

函數(shù)指針

函數(shù)指針的含義是一個指針變量,其指向的值是一個函數(shù),看下面一個例子。

#include   long factorial(int n)  {      long result = 1;    while (n > 1)      {          result *= n;          n--;      }      return result;  }  int main() { 	long (*pf)(int n) = factorial; 	long result1 = pf(10); 	long result2 = (*pf)(10); 	printf("%d\n",sizeof(pf)); 	printf("%ld,%ld\n",result1,result2); 	return 1; }

3-12行是一個求 factorial的一個函數(shù)。

16行聲明定義了一個函數(shù)指針,指向factorial函數(shù),注意括號不能省略。

17和18行是調(diào)用函數(shù)指針的兩種方式,效果是一樣的。

19行打印函數(shù)指針占的內(nèi)存空間。

C語言中指針的幾點注意C語言中指針的幾點注意

參考

《C語言深度剖析》

C語言函數(shù)指針基礎(chǔ) - http://blog.jobbole.com/44639/

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


本文標題:C語言中指針的幾點注意-創(chuàng)新互聯(lián)
當前鏈接:http://weahome.cn/article/ddcdjj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部