**引言:**
要想真正掌握C語言,掌握指針時必須的,可以說指針是C語言的靈魂。**
指針變量一定要先進行初始化,然后才能使用。初始化指要對指針變量進行賦值,將一個地址值賦值給指針變量。極為常犯的錯誤是:
**int *a;**
***a = 12; ? /*未對它進行初始化,沒有辦法預測12這個值將存儲于什么地方*/**
**分析幾個指針的例子:**
? ?1、*d = 10 - *d; 兩個間接訪問操作。右邊的間接訪問作為右值使用,所以它的值是d所指向的位置所存儲的值(a的值)。左邊的簡介訪問作為左值使用,所以d所指向的位置(a)把賦值符右側的表達式的計算結果作為它的新值。
? ?2、*&a = 2;這條語句的意思是:把值2賦值給變量a。這條語句在功能上與a=2是相同的。但是,它涉及更多的操作。除非編譯器知道你在干什么并丟棄額外的操作,否則它所產生的目標代碼將會更大、更慢。
? ?3、int a = 12; int *b = &a; int **c = &b;指針變量和其他變量一樣,占據內存中某個特定的位置,所以用&操作符取得它的地址是合法的。
? ?值的類型并非值本身所固有的一種特性,而是取決于它的使用方式。比如在算數運算中,char型值可以被強制轉換為int型的值。一個變量的值就是分配給這個變量的內存位置所存儲的數值。通過一個指針訪問它所指向的地址的過程稱為簡介訪問。用于執行簡介訪問的操作符是單目操作符*。
- 前言
- (四)回調函數
- (一)while(1)死循環與for(;;)死循環的區別
- (二)static關鍵字
- (三)函數
- (四)可變參數函數
- (五)setjmp和longjmp
- (六)指針
- (七)回調函數
- (八)字符串
- (九)動態內存分配
- (十)結構體
- (十一)深入理解指針
- (十二)命令行參數
- (十三)printf、fprintf、sprintf和snprintf函數
- (十四)const關鍵字詳解
- (十五)字符串輸入函數fgets、gets和scanf
- (十六)字符串輸出函數puts、fputs和printf
- (十七)字符/字符串輸出函數fputc、fputs、putc、putchar和puts
- (十八)字符/字符串輸入函數fgetc、fgets、getc、getchar和gets
- (十九)restrict關鍵詞
- (二十)scanf函數詳解
- (二一)內聯函數
- (二二)位操作
- (二三)errno變量
- (二四)內存分配