您好,登錄后才能下訂單哦!
今天小編給大家分享一下C語言指針使用實例分析的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
指針這玩意說白了,就是用來存儲一個變量地址的東東 如圖:
(編輯器為vc2010)
#include<stdio.h> void main(){ int a,*p; a=5; p=&a; printf("a=%d,p=%p,*p=",a,p,*p); getchar(); }
所以通過剛剛的情況,我們發現通過指針我們不僅可以獲取一個變量的值還可以直接對變量的值修改
又如下面的例子:
#include<stdio.h> void main(){ int a=3; int* prt; prt=&a; printf("a的值為%d\na的地址為%p\nprt存放的值為%p\nprt的內存地址為%p\nprt所存的地址對應的值為%d",a,&a,prt,&prt,*prt); getchar(); }
說到指針只說基本的int char float有什么意思,接下來是一個數組指針 將數組和指針結合起來.當然數組本身在傳遞的時候就是以指針傳遞的. 下面是以段代碼演示
#include<stdio.h> void main(){ int a [5]={1,2,3,4,5},*p,i; p = a; for(i=0;i<5;i++){ printf("&a[%d]=%p,a[%d]=%d\n",i,p,i,p[i]); } getchar(); }
我們發現當p=a(指針指向數組a)后,指針p可以和數組a一樣操作,這就是指針數組.
既然說到了指針數組那么就不得不說數組指針,乍一看這兩個名字很像,其實差距還是很大的. int *p[] 下面還是以上面的例子為例,我們讓輸出結果一致
#include<stdio.h> void main(){ int a [5]={1,2,3,4,5},*p[5],i; for(i=0;i<5;i++){ p[i]=&a[i]; } for(i=0;i<5;i++){ printf("&a[%d]=%p,a[%d]=%d\n",i,p[i],i,*p[i]); } getchar(); }
我們發現,這個東東其實就是一個存儲地址的數組,這個內存地址既可以是int char 或者float 同時也可以是數組,這個我們在說完字符串數組后再說.
C語言里面沒有string類(java)也沒有str(python)只有字符,所以我們引入了字符串數組,用來存儲字符串. ('a' 一個字節 "a"兩個字節) 這里要注意一下的是,一個字符串數組如 char a[5]="hello",表面上看這里只有五個字符,但是其實在他們的內存分布里面最后面結尾('o'后面)還有一個字符'\0'表示結束,所以只用char a[5]放不下hello,char a[6]="hello"才行.所以"a" 是'a'+'\0'兩個字節('\0'不顯示)
#include<stdio.h> void main() { char a[6]={'h','e','l','l','o'}; //char a[6] ="hello";也行 printf("%s",a); getchar(); }
此外還要注意一點直接寫一個"hello"也是一個字符串數組只不過未命名罷了,我們可以用指針訪問
#include<stdio.h> void main() { char *p="hello"; printf("%s\n",p); //%s 會讀取第一個字符的地址知道讀到'\0' printf("%c",p[1]);//輸出字母e getchar(); }
先看一段代碼
#include<stdio.h> void main(){ char *p[3]={ "hello", "my", "friend" }; printf("%s",p[1]); getchar(); }
現在我們發現p[1]可以和一個字符指針一樣操作,也就是說 p[1]等價于
char a[4]="my",*c; c=a; 這里的c就等價于p[1]
#include<stdio.h> void main(){ char *p[3]={ "hello", "my", "friend" }; int i; for(i=0;i<2;i++) { printf("%c\n",p[1][i]); } getchar(); }
這個家伙,就是套娃,看一張圖就明白了
int (*p)( int x) int 指向的函數類型 (*p)指針名字 (int x) 所指向的函數所需要輸入的參數
這個呢就是一個函數 舉個例子
#include<stdio.h> void main(){ int go(int x); int x,(*p)(int x); scanf("%d",&x); p=go;//指針指向函數 //(*p)(x)也行 p(x); getchar(); getchar(); } int go(int x) { printf("you input number is:%d",x); }
這玩意的好處是啥呢, 有了這玩意,我可以直接向一個函數里面傳遞另一個函數 舉例升級
#include<stdio.h> void main(){ int go(int x),x; void show(int x, int(*p)(int x)); scanf("%d",&x); show(x,go); getchar(); getchar(); } int go(int x) { printf("you input number is:%d",x); } void show(int x, int(*p)(int x)){ printf("you have inputed!\n"); p(x); }
說白了這就是一個函數,返回了一個地址如:
int* go (int* x,int* y)
和函數指針長得像,原因在于* 得運算級別比()低所以函數指針加了() 舉個例子
#include<stdio.h> void main(){ int *go(int *x); int a=5,*p; p=go(&a); printf("a的地址為:%p,值為:%d",p,*p); getchar(); } int *go(int *x){ printf("地址以獲取\n"); return x; }
這個就有意思了,C語言把所有的設備都視為指針. FILE *fp=NULL; fp = fopen("文件路徑","w") ("w"是打開模式,w寫) fprintf(fb,"%s",str) 這玩意和print的用法是一樣的只不過前面指明了指針 換句話說 printf("hello) 與 fprintf(stdout,"hello")一樣,stdout屏幕指針,stdin鍵盤指針 同理 fputs("hello",fp)
接下來是讀文件 char s[100] fp = fopen("文件路徑","r")
fscanf(fp,"%s",s) fgets(s,100,fp) (100是最大長度) 區別是什么呢,fprintf()讀到空格或回車就返回,fgets()讀到回車返回 此外還要fread() fread(接收數據的地址,讀取多少字節的內容,數據項個數,文件指針) 其他的查手冊就好 最后別忘了關閉 fclose(fp)
以上就是“C語言指針使用實例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。