c語言的指標的存在使得c語言對硬體的操控,以及靈活性得到了極大的提高。
但是指標的使用存在著很多難點問題。
#include
#include
//這裡的函式是指標做引數的例子,要知道這個特性可以彌補c語言只能有乙個返回值的特性。
void swap1(int *pa,int *pb)
//main()函式必須要返回乙個數字
int main()
這裡我們先定義兩個整型的變數a,b
然後再定義乙個臨時的指標變數,用來儲存中間變數
然後將b的變數的記憶體位址賦值給t,注意這裡 t 代表的是記憶體位址
然後把b的值給a,再用b接受t位址所儲存的變數, 注意這裡的*t是指t這個位址所指的那個變數。
指標與陣列
其實陣列的int a[10];
裡來說a其實是這個陣列的第乙個元素的a[0]的指標
所以陣列變數本身就是表達位址,所以
int a[10];
int *p=a; //無需用&取位址
但是陣列的單元表達的是變數,需要用&取位址
a==&a[0];
運算子可以對陣列做,也可以對指標做:
p[0] <==>a[0];
這裡的p[0]相當於*p
*a可以表示a[0]
陣列變數是const的指標
const 這個修飾符的作用就是表明乙個變數是指定的值不能改變了
int* const p=&i; //p是const
*q=26;//ok
q++; //error
int ls=58;
int ls1
int* const q=&ls;
*q =10;
*q=20;
// q = &ls1; 這句是不能通過編譯的,因為這個指標是不能指向其他位置的位址
//執行成功說明這裡的指標變數是可以被改變的
ls=36 ;
printf("\n%d",*q);
//然後我們來看另外一種情況
int p1=10;
int p2=20;
int const *t=&p1;
t=&p2;//執行結果為30
//*t =15;這裡是不能通過編譯的,因為這個指標指向的位置儲存的變數是不能賦值改變的。
p2=30;
printf("\n%d",*t);
//關鍵在於這裡的const是在*的前面還是後面決定的
return 0;
void mjyvoslmai(const int*p)
這裡我們傳入了乙個指標,但是在函式裡,是不能改變這個指標所指向的值的
指標的運算
#include程式設計客棧t;
#include
int main()
指標的型別轉換
void*表示不知道指向什麼東西的指標
指標變數的大小是jyvoslm相同的但是,指標是有型別的差別
總之指標的作用
1、需要傳入較大的資料的時候用做引數
2、傳入陣列後對陣列做操作
3、函式返回的結果不止乙個的時候可以用指標帶出(c只能return乙個變數,或者值)
需要要用函式來修改不止乙個變數
4、動態申請記憶體.......
具體的後續會更。
總結
C 簡單的向量用法例項教程
using system class vector 獲取向量的長度 public double getlength 過載運算子 public static bool operator vector a,vector b 過載運算子 public static bool operator vector...
C 中lock死鎖例項教程
這篇文章主要介紹了c 中lock死鎖的用法,對於共享資源的訪問及c 程式設計的安全性而言,有著非常重要的意義!需要的朋友可以參考下 lock的使用原型是 1 234lock x 首先要明白為什麼上面這段話能夠鎖定 其中的奧妙就是x這個物件,事實上x是任意一種引用型別,它在這兒起的作用就是任何執行緒執...
C語言程式中遞迴演算法的使用例項教程
1.問題 計算n!數學上的計算公式為 n!n n 1 n 2 21 使用遞迴的方式,可以定義為 以遞迴的方式計算4!f 4 4f 3 遞迴階段 f 3 3f 2 f 2 2f 1 f 1 1 終止條件 f 2 2 1 回歸階段 f 3 3 2 f 4 4 6 24 遞迴完成 以遞迴方式實現階乘函式的...