一、位址指標的基本概念
計算機中所有資料存放在儲存器中,一般將乙個位元組稱為乙個記憶體單元。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。
void2、用呼叫函式方式實現例1功能。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);
}
void maxmin(int *pa,int *pb)引申下段程式:void
main()
printf(
"max=%d,min=%d.\n
",a,b);
}
void maxmin(int *pa,int *pb)3、輸入a,b,c三個整數,按大小輸出void
main()
printf(
"a=%d,b=%d.\n
",a,b);
printf(
"*pa=%d,*pb=%d.\n
",*pa,*pb); //
呼叫函式改變的是形式引數指標變數的指向,不
影響實際引數指標變數的指向,存放a和b記憶體單元的值也未受到影響
}
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...