C語言--指標(一)

來源:互聯網
上載者:User

標籤:定義   長度   擷取   font   繪圖   swa   net   記憶體   data   

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenVveW91MTMxNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenVveW91MTMxNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenVveW91MTMxNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenVveW91MTMxNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenVveW91MTMxNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >


#import <Foundation/Foundation.h>//交換函數void swap(int x, int y){    printf("x=%d,y=%d",x,y);    int temp = 0;    temp = x;    x = y;    y = temp;    printf("x=%d,y=%d",x,y);        }//void swap2(int *x , int *y){    //不改地址,改地址相應的值    printf("x=%d,y=%d",*x,*y);    int temp = 0;    temp = *x;    *x = *y;    *y = temp;    printf("x=%d,y=%d",*x,*y);}int main(int argc, const char * argv[]){            //C語言定義指標的時候,喜歡使用p,q,r等;    //類型是int*    //變數名p    //初值NULL恒等於0//    int *p = NULL;//    //列印指標%p//    printf("%p %lu\n",p,sizeof(p));//    //    char *q = 0*1000;//    printf("%p %lu\n ",q,sizeof(q));        #pragma mark---------指標總結    //我們通常所說的指標,指的是指標變數,    //指標變數是存放, 記憶體位址 (記憶體編號)的變數.        //32位,8個0或1表示每8位一個位元組    //指標佔用的記憶體都一樣,指標變數佔用的記憶體不一樣        //p和q所佔記憶體一樣,由雩都是32或64位系統下的首地址,都占那麼多,而int,char決定長度不一樣,int佔四間房,char就佔1間房        //取地址符,是知道int a = 3,a值是3, int *P想指向記憶體中a = 3,這時候有了取地址符&a,就是a的首地址,//    int a = 3;//    int *p = &a;//    printf("p=%p\n",p);//    printf("&a=%p\n",&a);////    printf("%d",*p);//    //    char b = 'a';//    char *q = &b;//    printf("%p %lu\n",q,sizeof(q));    //整型等於整型地址,字元型等於字元型地址    //沒有誰是猜的地址,&取地址符,去整型,就是整型指標....        //*p 取值符 地址裡存放的內容    //取多少位元組取決於類型修飾符//    printf("%d \n",*p);//*p 取值運算子  用於擷取 指標相應的值//    printf("%d %c\n",*p,*q);            //擷取地址兩種途徑    //第一,直接給地址    //第二,用取值符號&來取#pragma mark-------------指標變數的賦值,代表指標變數的重指向    //指標變數指向    //指標變數的賦值,代表指標變數的重指向    //注意    //不要讓整型指向字元型    //也不要讓字元型指向整型//    p = &b;錯誤            //    int a = 10;//    int *p = &a;//    printf("指標p存放的地址: %p 指標p佔用的記憶體空間大小:%lu 這個記憶體空間裡存放的值: %d\n",p,sizeof(p),*p);//    //p自己也占記憶體//    //它們都放在棧區,一個一個分配記憶體//    printf("p自己的地址: %p\n",&p);//    int b = 20;//    p = &b;//    printf("指標p儲存的新地址:%p 新的記憶體空間裡存放的值 %d\n",p,*p);    #pragma mark-------------指標的算術運算    //唯獨加減運算    //int * p = &a;    //P++;向高位移動四個位元組    //p--;向低位移動4個位元組        //p每加一代表加了這麼大類型    //p++//向高位移動四個位元組    //p+1//沒有變    //*(p++)    //*(p+1)        //int * p = &a;只告訴編輯器 p是一個指標        //*p = 20;操作符,取地址相應的值        //p 指標(地址) *p取值 &p地址 &(*P)地址    #pragma mark-------------數組與指標//    int arr[5]={9,2,3,4,5};//    printf("%p\n",arr);//    printf("%p\n",&arr[0]);//    int *p = arr;//    printf("%d\n",*p);//    printf("%d\n",*(p+1));//    printf("---%d\n",p[1]);//    arr[1]=8;//直接改值//    *(p+1)=7;//間接改值//    printf("%d\n",*(p+1));#pragma mark-------------數組去*號加[]原則,把數字擴出來//    printf("%d\n",*(p+1));//    printf("%d\n",p[1]);        //p[2] *(p+2) arr[2]//    p=arr+3;//指標變數是變數,能夠重指向(賦值)    //arr = p;數組名是一個常量指標,不能夠改變賦值.        //通過數組元素求數組元素個數,sizeof(a)/4    //    short a[4]={3,7,9,1};//    int  *p1 = a;//    char *p2 = a;//    printf("%d",*p1);//    printf("%d",*p2);    #pragma mark-------------字串與指標    //能夠操作單個字元,     *(p+2)='z';    //也能夠操作整個字串   printf("%s",(p+2));//    char str[]="iPhone";//    char* p = str;//    *(p+2)='z';//    printf("%s",(p+2));#pragma mark-------------指標數組    //存放指標的數組是指標數組    //常量區    //棧區.拷貝常量區    //    char *p1 = "iPhone";//    char *p2 = "Android";//    char *p3 = "win8";//    char *strings[3]={p1,p2,p3};        // char *strings[3]={"iphone","Android","win8"};    //操作整個字串    //列印指標數組(指標字串)//    for (int i = 0; i<3; i++) {//        printf("%s ",strings[i]);//    }//    printf("%s,%s,%s",strings[0],strings[1],strings[2]);    //操作單個字串//    *(strings[1]+4) = 'x';//指向常量,不能賦值//    char c = *(strings[1]+4);//    printf("\n %c",*(strings[1]+4));//    printf("\n %c",strings[1][4]);    //    #pragma mark-------------指標與函數    //改變不了值,由於是你壓根沒有改變a,b,而是改變它的副本x,y    int a = 10,b = 20;//    swap(a, b);//    printf("%d,%d",a,b);//    int *p = &a;//    int *q = &b;//    swap2(p, q);    //不改地址,改地址相應的值    swap2(&a, &b);    printf("a=%d,b=%d",a,b);    //學好指標,須要多繪圖            return 0;}


C語言--指標(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.