1. 程式人生 > >2017.11.15 c語言基礎與提高(三)

2017.11.15 c語言基礎與提高(三)

本次 是一些有關指標的知識。

1.指標是什麼?起什麼作用?
指標是變數的一種,裡面是一個地址,通過這個地址找到要找的資料。
實質:單元的地址就是指標內容;


2. 指標運算子
   &是取地址的運算子,*是表示指標運算子
例:
int  *p1,a ;
p1=&a;          
*p1 =3;

3.指標作函式引數
函式的引數不僅可以是整型、實型、字元型等資料,還可以是指標型別。作用是將變數的地址傳送到另一個函式中。
參考例程:p1swapp2, aswapb ;abcswap ;
注意:變數的地址賦予指向相同型別的指標變數 
4.指標的運算--賦值運算:
指標變數初始化賦值;
把一個變數的地址賦予指向相同資料型別的指標變數;
例如:int a, *pa ;
pa = &a ;  //把a的地址給pa,都是整型
把一個指標變數的值賦予相同型別的另一個指標變數;
        Int a, *pa = &a, *pb ;  pb = pa;  // 把a的地址給pb;

指標與NULL的比較
空指標是對指標變數賦予0值得到的:
#define NULL 0
Int  *p=NULL
p為指標變數,p=NULL表示空指標,不指向任何變數。
P !=NULL表示p不是空指標;

int
if(n == 0)或者 if (n != 0)
float
const float EPSINON = 0.00001;
if ((n >= -EPSINON ) && (n <= EPSINON ))
bool型別
if (flag)或者if (!flag)
指標型別
if (n == NULL)或者if (n != NULL)

注意:
指標變數未賦值時,可以是任意值,是不能使用的,會造成意外錯誤。而指標變數給NULL值後,則是可以使用的,只是不指向具體的變數。


指標變數的使用步驟:
1. 定義指標變數;
2.給指標變數賦地址;
3.正常使用指標進行運算;

a.陣列元素和指標
陣列的指標是指陣列的起始地址,陣列元素的指標是陣列元素的地址。

用指標引用陣列元素
C語言規定:
如果指標變數p已指向陣列中的一個元素,則p+1指向同一陣列中的下一個元素。

指向陣列的指標變數也可以帶下標。p[i]和*(p+i)等價。


引用一個數組:
下標法:用a[i]來表示;
指標法:用*(a+i),*(p+i)表示。

指標和字串:

在C語言中,可以用兩種方法訪問一個字串。 
1)用字元陣列存放一個字串,然後輸出該字串。 
int main()

    char string[]=”I love China!”; 
    printf("%s\n",string); 
    return 0;

說明:和前面介紹的陣列屬性一樣,string是陣列名,它代表字元陣列的首地址

2) 用字串指標指向一個字串。 
main()

char *string[]={”I love China!”,”I am ”}; 
printf("%s\n",string); 

char *s="C Language"; 則表示s是一個指向字串的指標變數。
把字串的首地址賦予s。 


字元陣列和字串的區別
1.    字串指標變數本身是一個變數,用於存放字串的首地址。而字串本身是存放在以該首地址為首的一塊連續的記憶體空間中並以‘\0’作為串的結束。
字元陣列是由於若干個陣列元素組成的,它可用來存放整個字串。
2.   對字串指標方式 char *ps="C Language"; 
可以寫為:
char *ps; ps="C Language"; 
   而對陣列方式: char st[]={"C Language"}; 
不能寫為:
char st[20] ; st={"C Language"}; 
而只能對字元陣列的各元素逐個賦值。

3.前面說過,當一個指標變數在未取得確定地址前使用是危險的,容易引起錯誤。
但是對指標變數直接賦值是可以的。因為C系統對指標變數賦值時要給以確定的地址。 
因此, char *ps="C Langage"; 
或者 char *ps; ps="C Language"; 都是合法的。

 
以上就是本次知識點!