C語言基礎知識回顧 4-指標
阿新 • • 發佈:2021-01-12
C語言基礎知識回顧 %超適用於計算機二級%
第四章 指標
4.1 指標變數的定義
-
指標變數必須區分基型別,基型別不同的指標變數不能混合使用.
-
e.g.
int **p, *s, k=20;
s=&k;
p=&s; /*三者關係如下圖*/
4.2 給指標變數賦值
-
一個指標變數可以通過不同的方式獲得一個確定的地址值,從而指向一個具體的物件.
-
e.g.
int k=1, *q, *p;
q=&k;
//s=&(k+1); /*不合法賦值*/
p=q; /*該關係如下圖*/
p=NULL; /*等價於p=’\0’;或p=0; 表示給指標變數賦空值.*/
4.3 對指標變數的操作
(1)通過指標來引用一個儲存單元: 通過“*”(間接訪問運算子).
e.g.
int *p, i=10, j;
p=&i;
j=*p; /*把p所指的內容i賦值給j,等價於j=i*/
int *p, k=0;
p=&k;
*p=100; /*把100放到p所指的k中,即k=100*/
*p=*p+1; /* p所指的內容加1,即k=k+1=101.*/
/*等價於*p+=1; 或++*p; 或(*p)++ */
(2) 移動指標,使其指向相鄰的儲存單元. 該操作用於陣列或字串這種連續的儲存單元才有意義.
e.g.
int *p,*q, k;
…
q=p+2; q++; q--; p++; /* 均為合法的語句*/
k=p-q; /*k為兩個指標間隔的儲存單元數*/
4.4 函式間地址值的傳遞
(1) 指標變數做形參,地址做實參.
#include <stdio.h>
int myadd (int *a, int *b) /*指標變數作形參*/
{
int sum;
sum=*a+*b; return sum;
}
void main ()
{
int x,y,z;
scanf("%d %d", &x, &y);
z=myadd(&x, &y); /*地址作實參*/
printf(“%d+%d=%d\n”,x, y, z);
}
#include <stdio.h>
void swap (int *a, int *b) /*指標變數作形參*/
{
int t; t=*a; *a=*b; *b=t;
}
void main ()
{
int x=20,
y=30;
swap(&x, &y); /*地址作實參,通過傳送地址值在被呼叫函式中直接改變函式中變數的值*/
}
(2) 函式值為指標型別,返回地址值.
#include <stdio.h>
int *fun (int *a, int *b) /*函式值型別為指標型別*/
{
if(*a>*b) return a; return b;
}
void main ()
{
int *p, x, y;
scanf(“%d%d”,&x,&y);
p=fun(&x,&y); /*返回一個地址給指標p*/
}