1. 程式人生 > 其它 >C語言基礎知識回顧 4-指標

C語言基礎知識回顧 4-指標

技術標籤:計算機二級c語言

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*/
}