標籤:
//// main.m// LessionPointer//// Created by laouhn on 15/7/24.// Copyright (c) 2015年 池海濤. All rights reserved.//#import <Foundation/Foundation.h>void jiaohuan(int *a,int *b){ *a = *a^*b; *b = *a^*b; *a = *a^*b;}int main(int argc, const char * argv[]) { //指標變數 :儲存地址的變數 /** * 指標定義時,資料類型的作用,告訴系統我是一個什麼類型的指標 //指標變數定義時,資料類型的作用(以 int 為例) 1.告訴系統我是一個 int 類型的指標 2.在指標運算是,每次位移的位元組數 int -4 個位元組 3.指標控制的位元組數,int 控制 4 個位元組 */ /** int a = 10; int *p = NULL;//指標變數p char *q = NULL; //指標q 的資料類型是: char *; //平時我們所說的指標,其實就是指標變數,指標中儲存的是地址 //指標變數中地址的輸出 printf("%p\n", p); //指標變數所佔位元組數:只與系統作業系統位元有關,32作業系統 4個位元組,64位作業系統8個位元組 printf("p = %lu\n", sizeof(p)); printf("q = %lu\n", sizeof(q)); //取址運算子: & p = &a; printf("%p\n",p); printf("%p\n", &a); //取值運算子 * //printf("%d\n",*p); //指標變數的賦值:指標重指向,就是對指標變數重新複製的過程. //指標運算:只有加減運算. printf("%d\n",*(p+1)); printf("%p\n",p+1); printf("q+1之後輸出的結果%d\n",*(q + 1)); */// int a = 10;// int *p = &a;// *p = 30;// //*p 在等號左側是,是對p中儲存的地址進行賦值操作,否則是取值操作// //int *p = NULL;在定義時*p的作用 高數系統定義的是指標變數.// printf("%d\n", a); //指標與數組 /** * int a[] = {9, 5, 2, 7}; //數組名是數組首地址,但是數組名是一個常量地址 printf("%p\n",a); printf("%p\n",&a[0]); int *p = a; printf("%d\n",*p); //指標位移給指標類型有關 printf("%d\n", *(p + 1)); printf("%d\n",p[1]); printf("%d\n", *(p + 1 + 1)); printf("%d\n", *(p + 1 + 1 + 1)); printf("%d\n",*a); printf("%d\n", *(a+1)); printf("%-----d\n",a[1]); int b[] = {3, 8, 4, 9}; p = b;//指標重指向 //a = b;a是一個常量,不能被賦值,而指標式一個變數,可以重指向(重新賦值). //數群組類型,與指標類型不符,會出現什麼問題? int b[] = {256, 5, 2, 7}; int *p = b; for (int i = 0; i < 4; i++) { printf("%d", *(p + i)); } //printf("%d\n",*(q + 1)); char str[] = "iPhone"; char *p = str; //通過指標輸出字串 printf("%s\n",p); //把h 改成 H,直接通過地址對裡面的值進行修改 是取值運算子 *(p + 2) -= 32; printf("%s\n", p); //此種情況,q中儲存的是,常量區的地址,而常量區的內容,不允許被修改.切記!!???(alt shift +k) char *q = "iPhone"; (q + 2) = ‘H‘; printf("q 的地址 %p\n",q); //通過指標計算字串的長度. char str[] = "iPhone"; int i =0; char *p = str; while (*(p + i) != 0 ) { i++; } printf("%d",i); */ //字串數組 //char strArray[][20] = {"iPhone", "iPod", "iPad", "iWatch"}; // printf("%s\n",strArray[0]); //指標數組,裡面存得是地址// char *str[] = {"iPhone", "iPod", "iPad", "iWatch"};// // printf("++++%lu",sizeof(str));// for (int i = 0; i < 4 ; i++) {// //printf("%p ",str[i]);// printf("%s ",str[i]);// }// printf("\n"); //printf("%p\n",&str[0]); //char p[] = "ddddd"; //將上述指標數組,升序排序 //str[0] 儲存的是iPhone的首地址 //str[1] 存的是iPod 的首地址 //str[2] 存的是ipad 的首地址 //str[3] 存的是iWatch的首地址 /** * for (int i = 0; i < 4 -1; i++) { for (int j = 0; j < 4 - 1 -i; j++) { if ( strcmp(str[j],str[j+1])>0) { // *(p + 2) p[2] //比較的是 內容,交換的是數組中的地址的位置 char *temp =str[j]; str[j] = str[j + 1]; str[j + 1] = temp; } } } for (int i = 0; i < 4; i++) { //printf("%p ",str[i]); //輸出數組中的元素 printf("%s ",str[i]);//輸出數組元素,對應地址上的內容 } //字串數組 char str[4][20] = {"iPhone", "iPod", "iPad", "iWatch"}; //指標數組,該指標數組儲存的是棧區空間地址 char *strArray[4] = {str[0], str[1], str[2], str[3]}; for (int i = 0; i < 4;i++) { printf("%p ", strArray[i]); } printf("\n"); //指標數組,該指標數組儲存的是常量空間的地址 char *str1[4] = {"iPhone", "iPod", "iPad", "iWatch"}; for (int i = 0; i < 4;i++) { printf("%p ", str1[i]); } */ //指標與函數 int a = 5; int b = 6; jiaohuan(&a,&b); printf("a=%d,b=%d",a,b); return 0;}
iOS指標第一天