C语言指针这些使用技巧值得收藏!
指針用的好猶如神助,用不好會讓你叫苦連連,但大多數人是用不好指針的,所以后來的很多語言都把指針封裝,屏蔽。比如JAVA,java是沒有指針的,但是很多地方都用到指針,不過不對用戶開放,語言的自身機制幫用戶處理指針的分配釋放,為的就是方便用戶使用,減少錯誤。不過我們不能因噎廢食,指針雖難,但學好了會大大提升你的編程能力。
下面來列舉一下在學習過程中指針的常見錯誤。
1.指針和指針變量
很多初學者沒搞明白這兩者的區別,以至于很多時候把兩者等同了。在C語言中指針是一個概念性的東西,簡單而言就是地址。而指針變量是變量類型,屬于int,float這類的,是用來存放指針的,也就是地址。但是很多時候我們說指針時是代指指針變量的,這點我們要知道。
2.指針變量的地址和指針變量存放的地址
凡是變量都要有內存來存放,指針變量也不例外,它也有一個地址,但是指針變量本身又是存放地址的,所以很多人會在這個地方搞不清楚,分不清什么時候是指針變量的地址,什么時候是指針變量存放的地址,尤其是在有二級指針或數組的時候。
?3.沒分配空間就給指針賦值
這是初學者很容易犯的錯誤,我們來看一個例子。
此時的指針p是沒有指向任何有效的空間,看清楚是有效空間,并非是沒有指向內存空間,定義的時候p就有值的了,是一個隨機值,指向一個不明的內存空間,但是不合法 的,當你去訪問的時候就會出錯。
正確的寫法是
char?*?p=(char*)malloc(sizeof(char)*size);//size?你所需的內存大小。scanf("%s",p);//注意這里不能寫成"&p",因為p本身就存放了地址,不需再用取地址符了。
4、用到二級指針來存放字符串時沒有分配到空間
我們常用字符串數組來存放一系列的字符串,但是不能動態分配空間大小,要事先指定,這在很多時候是不行。所以我們要用到指針來存放,這時候就很容易出錯了。
錯誤一:
錯誤原因:p是一個二級指針用來存放一系列char*變量,但是我沒有給p分配內存空間就直接用了。我只是給每一個p[i]分配了空間,但是還需要存放p[i]地址的內存空間。也就是存放每一個字符串地址的內存空間還沒有分配給p.
錯誤二:
char**p;//定義一個二級指針來存放一系列字符串 p=(char**)malloc(sizeof(char*)); for(i=0;i{ p[i]=(char*)malloc(sizeof(char)*len));//len?字符個數 }錯誤原因:這是很網上多人的寫法,也是很常見的一種錯誤,這里雖然給p分配了空間但是僅僅是分配了一個char*類型的空間,當size超過1的時候,就會出錯。
正確寫法:
空間
5.釋放空間
C語言中用free來釋放空間,一般用法是:
free(p);//這里釋放的是p指向的空間,存放p的內存空間沒有被釋放。p=NULL;//建議加上這句分配空間:
空間
釋放空間正確寫法:
for(i=0;i<size;i++) free(p[i]); free(p); p=NULL;聲明:
本文于網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。
總結
以上是生活随笔為你收集整理的C语言指针这些使用技巧值得收藏!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iPhone 15系列将使用什么屏幕会比
- 下一篇: C语言预处理命令分类和工作原理