譚浩強C 指標(一)

2022-04-04 15:27:28 字數 2795 閱讀 5024

一、位址指標的基本概念

計算機中所有資料存放在儲存器中,一般將乙個位元組稱為乙個記憶體單元。c語言中整型資料佔兩位元組,即兩個記憶體單元;字元型資料佔乙個記憶體單元。為準確訪問記憶體單元,須給記憶體單元編號,這編號也稱為位址。指標就是對位址的描述。資料或函式在記憶體中都是連續存放的,通過指標指向的首位址可以找到資料或函式。

二、變數的指標和指向變數的指標變數

針變數中說明符*的區別。

(3)指標變數初始化

1)定義中直接賦值:

int a;

int *p=&a;

2)單獨賦值(不能把直接數、常量賦值給指標變數):

int a;

int *p;

p=&a;

4、指標變數作為函式引數

如果指標變數作為函式的引數,則在呼叫時講實際引數(實際指標變數的值)傳給形式引數指標變數,但一般情況下,與一般的實際引數一樣,在呼叫之後實際引數本身的值不發生變化,實際指標變數引數的值也不變化,即不改變實際指標變數的指向位址。因為呼叫函式時僅僅是實際引數向形式引數傳遞值而已,不影響本身。

5、指向其他資料型別的指標變數

(1)指向陣列

int a[2],*pa;

pa=a; //陣列名表示陣列的首位址

pa=&a[0]; //另外一種寫法,因為陣列第乙個元素的位址即為陣列首位址

(2)指向字串

char *pc;

pc="clanguage"; //將字串"clanguage"首位址給pc

(3)指向函式入口

int (*pf)()

pf=f; //f為函式名稱

?疑問1:

對於指向陣列的指標變數為何用int定義?按理解int *定義的指標變數指向的記憶體單元存放

的是基本整型資料。如果這樣定義,用(指標運算子*+指標變數)表示的究竟是整型資料還是陣列呢?

疑問例1:

上例中pa指向陣列b,*pa表示第乙個陣列元素;*(pa+1)表示第二個陣列元素。

那麼上面疑問1「如果這樣定義,用(指標運算子*+指標變數)表示的究竟是整型資料還是陣列呢?」則並不是問題了。因為指向陣列的指標變數資料型別須與陣列型別一致。

?疑問2:

對於指向字串指標變數為何賦初值直接寫出整個字串。另外,對於譚浩強書中例子:

char *pc;

pc="clanguage";

如果對於字串"clanguage"在定義指標變數之前未有定義該字串會否程式出錯?如果未定

義,系統怎知忽然冒出的這個字串的儲存位址呢?或是在給pc賦初值的同時就先給字串

分配了儲存空間?

上例顯示程式終止,問題在**?

三、理解例項

1、輸入a,b整數,按大小分別輸出a和b。

void

main()

//2、只是通過改變指標變數的指向

printf("

a=%d,b=%d.\n

",a,b);             //

1、存放a和b的記憶體單元中的數值沒有變

printf("

max=%d,min=%d.\n\n\n

",*pa,*pb);

//如果要互換ab的值:

printf("

input 2 numbers:");

scanf(

"%d%d

",&a,&b);

if(a

方法一:直接通過中間變數轉換

printf("

max=%d,min=%d.\n\n\n

",a,b);

printf(

"input 2 numbers:");

scanf(

"%d%d

",&a,&b);

if(a

方法二:改變指標指向記憶體單元的值,即改變ab值

printf("

max=%d,min=%d.\n

",a,b);

}

2、用呼叫函式方式實現例1功能。

void maxmin(int *pa,int *pb)

void

main()

printf(

"max=%d,min=%d.\n

",a,b);

}

引申下段程式:

void maxmin(int *pa,int *pb)

void

main()

printf(

"a=%d,b=%d.\n

",a,b);

printf(

"*pa=%d,*pb=%d.\n

",*pa,*pb);      //

呼叫函式改變的是形式引數指標變數的指向,不

影響實際引數指標變數的指向,存放a和b記憶體單元的值也未受到影響

}

3、輸入a,b,c三個整數,按大小輸出

void maxmin(int *pa,int *pb)

void

main()

if(a

if(b

printf(

"max=%d,middle=%d,min=%d.\n

",a,b,c);

printf(

"max=%d,middle=%d,min=%d.\n

",*pa,*pb,*pc);

}

譚浩強C 程式設計 指標習題11

在主函式中輸入 個等長的字串。用另一函式對它們排序。然後在主函式 出這 個已排好序的字串。用指標陣列處理上一題目,字串不等長。include include include using namespace std main 3.心得 1.name 10 按照結合的方式是指標陣列,就是陣列的每一元素都...

C語言程式設計譚浩強版 一

本章的一些概況這裡就不說了,直接進入細節的學習!3.1 c的資料型別 資料型別分為 基本型別 構造型別 指標型別 空型別 基本型別又分為 整型 字元型 實型 浮點型 又分為單精度型 雙精度型 列舉型別 構造型別又分為 陣列型別 結構體型別 共用體型別 3.2 常量和符號常量 在程式執行過程中,其值不...

譚浩強C 結構體

一 結構體的定義 1 定義形式 struct 結構名 定義為語句,分號不能丟 2 結構型別變數的宣告 1 宣告形式1 struct student st1,st2,st3 3 結構體變數的賦值 如上例 struct student st1 3 結構陣列的定義 struct student stu 5...