在程式中是通過對記憶體單元進行訪問操作,但是**經過編譯後就將變數名轉換為變數在記憶體中的位址,對變數值的訪問都是通過位址進行的。如i+j 其含義是:根據變數名對應的位址,讀取 i 的資料放入到cpu暫存器中,再找到 j 的位址,讀取 j 的資料放入到cpu另乙個暫存器中,通過cpu的加法中斷計算結果。
形式:型別說明 *變數名;
定義與賦值
int a;
int *p=&a;
int a;
int *p;
p=&a;
引用
#include #include int main()
int main()
& 和 * 運算子*&p 和 &*p運算子&和*的優先順序相同,則自右向左結合。
指標的自加減運算指標的自加減運算相當於按照變數型別所佔位元組數的大小,對位址進行加減。
使用指標指向乙個一維陣列,其指向的是陣列的首個元素的位址,利用指標可以通過引用首位址來引用整個陣列。
#include #include int main()
for(int i=0; i<5; i++)
return 0;
}
#include #include /*將乙個3行5列的陣列元素的第二行元素輸出*/
int main()
}for(int j=0;j<5;j++)
return 0;
}
*(*(a+n)+m):表示第n行第m列元素
*(a[n]+m):表示第n行第m列元素
注意:*(a+i)與a[i]是等價的
訪問字串的方式,①使用字串資料進行訪問,②使用字元指標指向字串
將字串陣列賦值給指標實際上是將字串中第乙個字元的位址賦值給指標。
案例:將str1與str2拼接
#include #include int main()
printf("%s",str2);
return 0;
}
字串陣列對於每個字串而言,無理論是否需要開闢的空間,都需要按照最大字串的長度來開闢空間,這樣就會造成記憶體浪費。使用字串指標,可以減少空間浪費
#include #include int main()
; for(int i=0;i<12;i++)
printf("%d",sizeof(month)); //結果為96
案例:利用指標的指標輸出一維陣列中的偶數元素。
#include #include int main()
; q=a;
p=&q;
for(int i=0; i<5;i++)
return 0;
}
在函式呼叫過程中,只能把實參的值傳遞給形參,形參的值發生改變,實參的值不會發生改變。
使用指標可以很好的解決上述問題,通過指標改變指向的位址,從而使值進行交換。
案例:使用氣泡排序法實現排序
#include #include /*使用指標實現氣泡排序*/
int main()
/*氣泡排序*/
for(int i=0; i<5; i++)}}
for(int i=0; i<5; i++)
return 0;
}
案例:求出二維陣列每行中的最大數,並求和
#include #include //注意定義函式,二維陣列指標作為形參時的傳入方法
int swap_max(int (*a)[3])
}printf("第%d行中最大的元素為%d\n",i+1,value);
sum+=value;
}printf("%d",sum);
}int main()
; int (*p)[3];
p=&a[0];
swap_max(p);
return 0;
}
指標變數也可以指向乙個函式,函式在編譯時會被分配乙個入口位址,該入口位址稱為函式的指標
乙個函式可以帶回乙個整型值、字元型、實型值等,也可以帶回指標型的資料,即位址
返回指標值的函式簡稱為指標函式
定義:型別 *函式名(引數列表);
案例:求周長
#include #include /*指標函式的使用*/
/*定義指標函式*/
int *per(int a, int b)
int main()
C語言指標
指標變數是包含記憶體位址的變數,它指向記憶體中的一塊區域,通過指標的值,可以間接訪問到相應的記憶體單元的資料,並做相應的修改。1 指標的定義和簡單使用 定義乙個指標變數和定義一般的變數類似,只需在變數名前面加乙個 對乙個指標變數賦值可以用取位址符 來獲取到乙個變數的位址,如果要獲得指標指向的記憶體區...
C語言指標
1 定義指標變數void change int n 格式 變數型別 變數名 定義了乙個指標變數p 指標變數只能儲存位址 指標變數p前面的int 指標變數p只能指向int型別的資料 int main void change int n 2 指標與陣列 陣列名其實質是乙個指標,但是它和普通的指標變數還是...
c語言指標
編寫程式,在主函式裡用指標陣列輸入六個字串,再用另乙個函式對這六個字串排序,並在主函式中輸出排好序的字串。include void sort char s,int n char temp for int i 0 ifor int j 0 jif strcmp s j s j 1 0 temp s j...