標籤:定義 長度 擷取 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語言--指標(一)