為什麼用指標

2021-08-16 23:19:34 字數 1779 閱讀 4673

相信接觸過程式設計的,大部分應該對c語言有一定了解或者學過一門c語言課程。或多或少聽到這種說法:c語言很難學,特別是指標。我大一下學期開的這門課,學完之後感覺還好(其實是我沒有深入學,典型的自我感覺良好: )),但指標那塊確實也沒太弄明白。現在好像明白了一點什麼是指標,在什麼情況下用比較好。

int  a=1

;//int* pointer_a=1 在編譯會報錯

// 'initializing':cannot convert from 'int' to 'int *'

// 就是說初始化時,這兩個不同型別的變數或值不能相互轉換

//指標實際上就是記憶體位址,該位址的記憶體單元儲存不同位元組長度的資料

int* pointer_a=&a; //&操作符表示去位址

//這裡pointer_a的值為變數a的位址

//當使用*操作時,*pointer_a取相應位址的記憶體單元裡的值(*pointer_a)=1

a=2;//*pointer_a=2,由於pointer_a的值為變數a的位址,所以a的值改變 會影響(*pointer_a)的值

printf("%d\n",*pointer_a); //會輸出2

指標有利於大塊資料的管理,但也更危險。特別是已經存在於記憶體中的資料,通過指標訪問更方便。 在一些情況下指標和陣列的效果好象差不多。

char

a,str[0x10]="hello world!"

;//不用給每個字元取乙個名稱

char* pointer_str=str;//這裡不會出現上面的錯誤,

printf("string:%s\n",pointer_str);//列印字串

//反問字串中的單個字元

a=*(pointer_str+6); //a='w'

a=*(pointer_str+20); //這有沒有什麼問題呢?這個操作只是相當於讀取,如果沒有讀到特殊的記憶體位址一般是沒有問題的,a會被重新賦值。但是看看str陣列的大小為16,現在讀到了下標為20的單元,這是哪來的呢?雖然該陣列只有(1*16bytes),但是記憶體都是連續的,它後面的記憶體裡可能也有資料。如果是寫操作問題可能就大了,改變了不屬於它控制範圍的環境,影響其他程式的執行。

乙個函式的型參的型別該如何確定,到底用常規型還是指標型。如果1,對資料處理的改變要求保留時2,處理大塊資料時,應該選指標型。

void sum(int a,int b) //計算a和b的和,並列印出來

//現在想要計算,並儲存在第乙個實參裡

void sum_pointer(int* a,int b)

int a=519;

sum(a,1);//列印520

printf("a:%d ",a); //列印519

sum_pointer(&a,1); //列印520

printf("%d\n",a); //還是我愛你,對吧

//字串或資料塊

void encryption(int* str)

int* str;

str=(int *)malloc(3*sizeof(int)); //給str申請一塊自己的記憶體,不用再去借地盤,受別人的約束

*(str+0)=5;

*(str+1)=1;

*(str+2)=9;

encryption(str);

printf("str:%d%d%d\n",*str,*(str+1),*(str+2));//列印520,資料的改變作用到記憶體,並保留下來

為什麼用指標 二

是的,a 和 b 的值倒過來了,為什麼呢?看程式 給 tmp 付給了 a的值 10 給a 付給了 b 的值 5 給 b 付給了 tmp 的值10 所以a 和 b 值倒過來了 void swap int a,int b intmain 怎樣才能用函式交換a 和 b 的值呢?用指標 看程式三 把 a,b...

python為什麼用flask 為什麼用flask

flask是python在web開發領域乙個輕量級的框架,為什麼選擇flask呢?此文可能會給你答案。選擇flask的原因 1.微框架 簡潔 只做它需要做的,給開發展提供了很大的擴充套件性。2.flask和相關的依賴 jinja2 werkzeug 設計得非常優秀,用著簡單。3.開發效率非常高,比如...

為什麼用css sprites

在分析各個 的css時,我們經常可以看到一些 有很多的元素共享了一張背景,而這張背景包含了所有這些元素需要的背景,這種技術就叫做css sprites。例如 的css sprites url是 這樣做有什麼好處呢?顯而易見,瀏覽器在載入每一張的時候都會發起乙個http請求。如果使用css sprit...