91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言中指針的幾點注意

發布時間:2020-07-28 22:03:42 來源:網絡 閱讀:308 作者:拳四郎 欄目:開發技術

前言

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

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


組名和數組名的地址

       首先看一段代碼:

#include <stdio.h> 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; }


編譯運行結果:

C語言中指針的幾點注意


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

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

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

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

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

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


指針數組和數組指針

首先看下面兩句:

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

這倆一個是指針數組,一個是數組指針,怎么區分的,答案:看優先級。

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

第二個,括號優先級最大,所以是定義一個指針,指針指向的內容是包含10個元素的數組,所以這是一個數組指針,注意,它是一個二級指針。

看一個例子:

#include <stdio.h> 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語言中指針的幾點注意


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


函數指針

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

#include <stdio.h>  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的一個函數。

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

17和18行是調用函數指針的兩種方式,效果是一樣的。

19行打印函數指針占的內存空間。

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


參考

《C語言深度剖析》

C語言函數指針基礎 - http://blog.jobbole.com/44639/

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

赤壁市| 陵川县| 隆安县| 莱阳市| 壤塘县| 顺义区| 囊谦县| 依兰县| 呼玛县| 三明市| 颍上县| 泸溪县| 光泽县| 牙克石市| 嵊泗县| 江源县| 新晃| 佛山市| 五大连池市| 米林县| 商丘市| 裕民县| 醴陵市| 泾阳县| 永春县| 灵川县| 乐清市| 徐闻县| 夏河县| 延庆县| 进贤县| 吉林省| 八宿县| 镇巴县| 台南市| 高阳县| 吕梁市| 琼中| 布尔津县| 延寿县| 金秀|