您好,登錄后才能下訂單哦!
這篇文章主要介紹“C語言中的指針怎么使用”,在日常操作中,相信很多人在C語言中的指針怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C語言中的指針怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
一、指針的大小
二、野指針和空指針
#include <stdio.h>int main(void){int a = 6;int* p;p = a;//把a的值賦給指針變量p,p為野指針,這樣做不會出現啥問題,但是沒什么意義 p = 0x456;//為指針變量p賦值,p為野指針,這樣做不會出現啥問題,但是沒什么意義 *p = 100;//操作野指針指向未知區域,內存會出問題,報錯。return 0;}
但是,野指針和有效指針變量保存的都是數值,為了標志此指針變量沒有指向任何變量(空閑可用),C語言中,可以把NULL賦值給此指針,這樣就標志此指針為空指針,沒有任何指針。
int* p = NULL;
說明:野指針指向一個未知的空間,程序中允許存在野指針。操作系統將0到255作為系統占用不允許訪問操作,操作野指針對應的內存空間可能會報錯。
#include <stdio.h>int main(void){//空指針是指內存地址編號為0的空間int* p = NULL;//操作空指針對應的空間一定會報錯 *p = 6; //這樣寫會報錯printf("%d\n", *p); return 0; }
三、萬能指針void*
void*指針可以指向任意變量的內存空間:
#include <stdio.h>int main(void){//void* p = NULL;void* p;int a = 6;p = (void*)&a; //指向變量時最好轉換為void* //使用指針變量指向內存時,轉換為int**((int*)p) = 10; //把a的值修改為10 //在通過萬能指針修改變量的值時,需要找到變量對應的指針類型。//printf("%p\n", p);printf("a = %d\n", a); return 0;}
程序執行結果:
萬能指針可以接收任意類型變量的內存地址。
void* p = &a;
四、const修飾的指針變量
(1)const修飾指針類型
const int* p = &a;
這種情況:可以修改指針變量的值,不可以修改指針指向的內存空間的值。
#include <stdio.h>int main(void){int a = 3;int b = 6;const int* p = &a; //p1的初始值是a的地址p = &b; //把b的地址賦給p1,即改變p1的值(這是可行的)*p = 15; //報錯,提示表達式必須是可修改的左值,因為不可以修改指針指向的內存空間的值(a的值)。printf("%p\n", p); //打印出的p1的值是b的地址,即可以修改指針變量的值。 return 0;}
(2)const修飾指針變量
int* const p = &a;
這種情況:可以修改指針指向的內存空間的值,不可以修改指針變量的值。
#include <stdio.h>int main(void){int a = 3;int b = 6; int* const p = &a;*p = 100;p = &b;//報錯,提示:表達式必須是可修改的左值。即不可以修改指針變量的值 printf("%d\n", a);//打印出的a的值為100,即可以修改指針指向的內存空間的值 return 0;}
(3)const修飾指針變量和指針類型
const int* const p = &a;
我們知道在這種情況下,既不可以修改指針指向的內存空間的值,也不可以修改指針變量的值。但是我們仍能通過二級指針來修改指針指向的內存空間的值和指針變量的值。
#include <stdio.h>int main(void){int a = 2;int b = 6; const int* const p = &a;int** pp = &p; **pp = 100; //把100賦值給a,即通過二級指針可以修改a的值,const不起作用了printf("%d\n", *p); //打印出的a的值為100 *pp = &b; //把b的地址賦值給p,通過二級指針可以改變p的值,const不起作用了printf("%d\n", *p);//打印出的是b的值,即6 return 0;}
這也說明了const存在一定的不安全性。
五、指針的加法運算
(1)指針計算不是簡單的整數相加。
(2)如果是一個int*,+1的結果是增加一個int的大小。
(3)如果是一個char*,+1的結果是增加一個char的大小。
指針的減法運算是類似的,很容易理解。
到此,關于“C語言中的指針怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。