啪啪拉拉噼里啪啦

          初學者天堂資料匯集

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            16 隨筆 :: 73 文章 :: 16 評論 :: 0 Trackbacks

          C語言筆記 指針

          1.       程序定義一個變量,分配內存. 內存單元地址內存單元內容的不同

          2.       變量的地址就是變量的指針.

          3.       一個變量專門存放另外一個變量的地址,稱之為指針變量.

          4.       如何定義:

          int i,  int j ;

          int *Pointer_i, *Pointer_j;

          定義的指針變量,是專門用來存放地址的.int *Pointer_i;是定義一個指針類型.

          賦值語句

          Pointer_i=&i;    Pointer_j=&j;

          (1)    &:取地址運算符 (2): * 指針運算符 (3): [] 變地址運算符

          #include<stdio.h>

          Void main()

          {  int a,b;

             int *P1,* P2              /* 定義了兩個指針變量,P1/P2,專門用來存放地址 */

             P1=&a;P2=&b;           /*P1指向a,P2指向b.*/

          printf(“%d,%d”,*P1,*P2);     /*輸出P1指向的變量a,輸出P2指向的變量b*/

          }

          5.       P1=&*P2;  P2指向B的地址,P1指向A的地址,經過賦值,P1指向B的地址

          6.       *&a  先進行&a運算,a地址,再進行*運算.&a(地址)指向得變量. *&a得作用和*P1作用一樣, *&aa等價

          7.       交換專題

          Swap(int *p1,int*p2)

          { int *p;p=p1; p1=p2; p2=p;

          }

          Swap(int p1,int p2)

          { int temp; temp=p1;p1=p2;p2=temp;

          }

          如果直接調用,則主函數得實參沒有進行交換.

          C/C++ 應該運用

          Swap1(int *p1,int*p2)           

          { int temp; temp=p1;p1=p2;p2=temp; }   /* 指針調用

          Swap2(int &p1,int&p2){int temp; temp=p1;p1=p2;p2=temp;} /* 引用調用

          8.       指向數組元素得指針

          int a[10]; int *p; p=&a[0];  // p=&a[0] p=a 等價, int *p=a;

          如果P=a; 那么p+1 指向a[1], p+2 指向a[2]; 所代表實際地址p+1*d (d 表示所占字節數,整型2 實型4 字符型 1)

          如果p=&a[0], p+i a+i  等價均指向 a[i]的地址; *(p+i)*(a+i) 均是 a[i]的數組元素

          8.1     下標法a[i]

          8.2     指針法 *(a+i) *(p+i), a是數組名,P是指向數組的指針變量 初值 P=a;

           

          用數組名做函數參數

           

           

          F(int a[]) F(int *a) 等價

           


          形參和實參都用數組名

          Main()

          { int a[10];

           ……

           Fa,10

          }

           

           


          Main()

          { int a[10];

           

           F(a,10)  

           

          }

           

           

           F(int *x, int n)

          {

          ………………

          }

          Main()

          { int a[10]; int *p

            P=a;

           

           F(p,10)  

           

          }

           

           

          多維數組

          a[i][j]

          a[0]值是 &a[0][0]  a[1] 的值是&a[1][0]  a[2]的值是&a[2][0]   a[3]&a[3][0]

          a&a[0][0]       a[0]+1 &a[0][1]                 a[0]+j  &a[0][j]

          a+1 &a[1][0]   a[1]+1 &a[1][1]                a[1]+j  &a[1][j]

          a+2 &a[2][0]   a[2]+1 &a[2][1]                 a[2]+j  &a[2][j]

          a+i  &a[i][0]    a[i]+j   就是 &a[i][j]  

          *(*(a+i)+j) a[i][j]的值

          *(a[i]+j) *(*(a+i)+j) 等價

          *(*a+1) 就是a[0][1]的值 或者說 *(*a+j)

           

          a[1]+2 *(a+1)+2 &a[1][2]   取地址

          *(a[1]+2) *(*(a+1)+2) a[1][2] 取值

          二維數組

          A[i][j] 其中 A[i] 實際上是地址,A是第0行第0列地址,A[i] I行地址第0列地址

           

           

          9.       int (*P)[4] 表示P 是一個指針變量,它指向包含4個元素的一維數組

          10.   int *p[4]   表示一個指針數組

          11.   字符串表現形式

          111用字符數組存放字符串,輸出該字符串

          #include<iostream.h>

          main()

          { char string[]=”l over you my beau MEIMEI”

           Cout<<string;

          }

             11.2 用字符指針指向一個字符串

             include<iostream.h>

             Void main()

          { char *string=”I love you my MEIMEI”

           Cout<<string;

          }

          字符串之間的COPY

          int  A[]=”I LOVE YOU ”

          int  B[50]

          int I;

          for(i=0;*(A+i)=’\0’ i++)

          {*(B+i)=*(A+i)}

          *(B+i)=’\0’;

          )

          Cout<<B; 或者for(i=0;b[i]!=’\0’;i++) {cout<<B[i]}

          12.   字符串指針做函數參數

          12.1 void copy_string(char from[],char to[])

          { int I;

           while(from[i]!=’\0’)

            {  to[i]=from[I];i++ }

          to[i]=’\0’;

          }

          12.2       void copy_string(char *from,char *to)

                { for(;from!=’\0’;from++,to++)

                  *to=*from;

                 *to=’\0’;}

                

          while ((*to=*form)!=’\0’)

          { to++; from++} ;

           

          While((*to++=*from++)!=’\0’);

           

          while(*form !=’\0’)

             { *to++=*from++;}

           *to=’\0’ ;

          分析 char *a;

               cin>>a; 危險性

           

           

          函數指針 和指向函數的指針變量

          用函數指針變量調用函數

          13.   main()

          { int  max(int,int)

          int (*p)(int, int)

          int a,b,c;

          c=(*p)(a,b)  //P先與*結合,表示一個指針變量,然后與()結合,表示指針變量指向函數

           // int *p() //P與()結合,聲明一個函數,返回值指向整型變量的指針

          }

          14.   用指向函數的指針做函數參數

           SUB(int, int, int(*p)(int x,int y), int(*q)(int a, int b))

           

          { int max(int x,int y);

          int min(int x,int y);

          int add(int x,int y);

          int Proress(int x,int y ,int(*)P(int x,int y))

          }

           

          15.       返回指針值的函數

          int * sub(int x,int y)

          {}

          16.       指針數組

          類型名 *數組名【數組長度】 // int *p[4] 每個數組元素(相當于一個指針變量)都可以指向一個整型變量

           

          17.       指向指針的指針

          例題:

          #include<string>

          #include<iostream.h>

          void main()

          { void sort( char *name[],int n);

           void print(char *name[],int n);

           char *a[]={“woaini”,”tushuguanli”,”wosafsat”,”adsao”};

           int n=4;

           sort(name,n);

           print(name,n)

          }

          void sort(char *name[],int n)

          { char *temp;

           int i,j,k;

          for(i=0;i<n;i++)

          { k=i;

           for(j=i;j<n-1;j++)

          { if(strcmp(name[k],name[j])>0) k=j;

          if(k!=i)

          {

          temp=name[i];

          name[i]=name[k];

          name[k]=temp;

          }

          }

          }

           }

          posted on 2005-04-01 08:50 噼里啪啦的世界 閱讀(300) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 图片| 根河市| 安宁市| 涞源县| 溆浦县| 衡阳市| 江都市| 自贡市| 时尚| 秦皇岛市| 平度市| 尼木县| 丹巴县| 宜君县| 文山县| 西贡区| 宝兴县| 邹城市| 嘉义市| 鲁甸县| 茶陵县| 北宁市| 库尔勒市| 堆龙德庆县| 岑巩县| 内黄县| 汽车| 平舆县| 和静县| 梅河口市| 阜平县| 兰溪市| 清新县| 桑日县| 靖宇县| 松滋市| 郯城县| 政和县| 岳阳县| 昌宁县| 黄平县|