c語言指針的簡單實例

c語言的指針的存在使得c語言對硬件的操控,以及靈活性獲得了極大的提升。數組

可是指針的使用存在着不少難點問題。函數

#include<stdlib.h>
#include<stdio.h>
//這裏的函數是指針作參數的例子,要知道這個特性能夠彌補c語言只能有一個返回值的特性。
void swap1(int *pa,int *pb){
    int t =*pa;
    *pa=*pb;
    *pb=t;
}
//main()函數必需要返回一個數字
int main(){
    int a =15;
    int b=10;
    int* t;
    t=&b;
    a=b;
    b=*t;
    printf("%d\n",b);
    swap1(&a,&b);
    printf("%p\t%p",a,b); 
    return 0;
}

這裏咱們先定義兩個整型的變量a,bspa

而後再定義一個臨時的指針變量,用來存儲中間變量指針

而後將b的變量的內存地址賦值給t,注意這裏 t  表明的是內存地址code

而後把b的值給a,再用b接受t地址所存儲的變量, 注意這裏的*t是指t這個地址所指的那個變量。blog

 

指針與數組內存

其實數組的int a[10];io

裏來講a實際上是這個數組的第一個元素的a[0]的指針編譯

因此數組變量自己就是表達地址,因此class

 1   int a[10];
 2   int *p=a; //無需用&取地址
 3 
 4 可是數組的單元表達的是變量,須要用&取地址  
 5   a==&a[0];
 6 
 7 []運算符能夠對數組作,也能夠對指針作:
 8 
 9 
10    p[0] <==>a[0];
11 這裏的p[0]至關於*p
12 
13 *a能夠表示a[0]
14 
15 數組變量是const的指針

const 這個修飾符的做用就是代表一個變量是指定的值不能改變了

int* const p=&i; //p是const

*q=26;//OK
q++; //ERROR
 1   int ls=58;
 2     int ls1=64;
 3     int* const q=&ls;
 4     *q =10;
 5     *q=20;
 6 //  q = &ls1;   這句是不能經過編譯的,由於這個指針是不能指向其餘位置的地址 
 7     //執行成功說明這裏的指針變量是能夠被改變的
 8     ls=36 ;
 9     printf("\n%d",*q);
10     //而後咱們來看另一種狀況
11     int P1=10;
12     int P2=20;
13     int const *T=&P1;
14     T=&P2;//執行結果爲30
15     //*T =15;這裏是不能經過編譯的,由於這個指針指向的位置存儲的變量是不能賦值改變的。 
16     P2=30; 
17     printf("\n%d",*T);
18     //關鍵在於這裏的const是在*的前面仍是後面決定的 
19     return 0;
1 void mai(const int*p){
2        
3        int *ls=*p; 
4            printf("ls的地址:%p",ls);
5 } 
6 這裏咱們傳入了一個指針,可是在函數裏,是不能改變這個指針所指向的值的

 指針的運算

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 int main(){
 5     int i,j;
 6     i=10;j=12;
 7     printf("i,j:%d,%d\n",&i,&j);
 8     printf("i,j:%d,%d",*&i+1,&j);
 9     printf("\n&i-&j:%d",(&i)-(&j));//這裏兩個地址作差實際上是地址差/類型所佔的位數
10 
11     int *p;
12     p=&i;
13     *p++;//其實是*(p++);++優先級比*高;數組遍歷
14     printf("\n*p:%d",*p);
15     return 0;
16 }

指針的類型轉換

void*表示不知道指向什麼東西的指針

指針變量的大小是相同的可是,指針是有類型的差異

 

總之指針的做用

1、須要傳入較大的數據的時候用作參數
2、傳入數組後對數組作操做
3、函數返回的結果不止一個的時候能夠用指針帶出(c只能return一個變量,或者值)
     須要要用函數來修改不止一個變量
4、動態申請內存.......

具體的後續會更。

相關文章
相關標籤/搜索