最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

帶你分分鐘玩轉(zhuǎn)C語言指針

 更新時間:2022年06月08日 16:28:10   作者:Huterox  
c語言指針其實是一個整形變量,與其它數(shù)據(jù)不同的是,它的作用是用來存儲其它變量的地址,下面這篇文章主要給大家介紹了關于C語言指針的相關資料,需要的朋友可以參考下

何為指針

指針這玩意說白了,就是用來存儲一個變量地址的東東 如圖:

(編輯器為vc2010)

#include<stdio.h>
void main(){
	int a,*p;
	a=5;
	p=&a;
	printf("a=%d,p=%p,*p=",a,p,*p);
	getchar();

}

所以通過剛剛的情況,我們發(fā)現(xiàn)通過指針我們不僅可以獲取一個變量的值還可以直接對變量的值修改

又如下面的例子:

#include<stdio.h>
void main(){
	int a=3;
	int* prt;
	prt=&a;
	printf("a的值為%d\na的地址為%p\nprt存放的值為%p\nprt的內(nèi)存地址為%p\nprt所存的地址對應的值為%d",a,&a,prt,&prt,*prt);
	getchar();

}

數(shù)組指針

說到指針只說基本的int char float有什么意思,接下來是一個數(shù)組指針 將數(shù)組和指針結(jié)合起來.當然數(shù)組本身在傳遞的時候就是以指針傳遞的. 下面是以段代碼演示

#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();
}

我們發(fā)現(xiàn)當p=a(指針指向數(shù)組a)后,指針p可以和數(shù)組a一樣操作,這就是指針數(shù)組.

指針數(shù)組

既然說到了指針數(shù)組那么就不得不說數(shù)組指針,乍一看這兩個名字很像,其實差距還是很大的. int *p[] 下面還是以上面的例子為例,我們讓輸出結(jié)果一致

#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();
}

我們發(fā)現(xiàn),這個東東其實就是一個存儲地址的數(shù)組,這個內(nèi)存地址既可以是int char 或者float 同時也可以是數(shù)組,這個我們在說完字符串數(shù)組后再說.

字符串數(shù)組

C語言里面沒有string類(java)也沒有str(python)只有字符,所以我們引入了字符串數(shù)組,用來存儲字符串. ('a' 一個字節(jié) "a"兩個字節(jié)) 這里要注意一下的是,一個字符串數(shù)組如 char a[5]="hello",表面上看這里只有五個字符,但是其實在他們的內(nèi)存分布里面最后面結(jié)尾('o'后面)還有一個字符'\0'表示結(jié)束,所以只用char a[5]放不下hello,char a[6]="hello"才行.所以"a" 是'a'+'\0'兩個字節(jié)('\0'不顯示)

#include<stdio.h>
void main()
{
	char a[6]={'h','e','l','l','o'};
	//char a[6] ="hello";也行
	printf("%s",a);
	getchar();
}

此外還要注意一點直接寫一個"hello"也是一個字符串數(shù)組只不過未命名罷了,我們可以用指針訪問

#include<stdio.h>
void main()
{
	char *p="hello";
	printf("%s\n",p); //%s 會讀取第一個字符的地址知道讀到'\0'
	printf("%c",p[1]);//輸出字母e
	getchar();
}

數(shù)組指針的sao氣操作

先看一段代碼

#include<stdio.h>
void main(){
	char *p[3]={
		"hello",
		"my",
		"friend"
	};
	printf("%s",p[1]);
	getchar();
	
}

現(xiàn)在我們發(fā)現(xiàn)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();
}

二級指針

這個家伙,就是套娃,看一張圖就明白了

函數(shù)指針

int (*p)( int x) int 指向的函數(shù)類型 (*p)指針名字 (int x) 所指向的函數(shù)所需要輸入的參數(shù)

這個呢就是一個函數(shù) 舉個例子

#include<stdio.h>
void main(){
	int go(int x);
	int x,(*p)(int x);
	scanf("%d",&x);
	p=go;//指針指向函數(shù)
	//(*p)(x)也行
	p(x);
	getchar();
	getchar();
}

int go(int x)
{
	printf("you input number is:%d",x);
}

這玩意的好處是啥呢, 有了這玩意,我可以直接向一個函數(shù)里面?zhèn)鬟f另一個函數(shù) 舉例升級

#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);

}

指針函數(shù)

說白了這就是一個函數(shù),返回了一個地址如:

int* go (int* x,int* y)

和函數(shù)指針長得像,原因在于* 得運算級別比()低所以函數(shù)指針加了() 舉個例子

#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是最大長度) 區(qū)別是什么呢,fprintf()讀到空格或回車就返回,fgets()讀到回車返回 此外還要fread() fread(接收數(shù)據(jù)的地址,讀取多少字節(jié)的內(nèi)容,數(shù)據(jù)項個數(shù),文件指針) 其他的查手冊就好 最后別忘了關閉 fclose(fp)

總結(jié)

到此這篇關于C語言指針的文章就介紹到這了,更多相關C語言指針內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 利用Qt實現(xiàn)可擴展對話框的示例代碼

    利用Qt實現(xiàn)可擴展對話框的示例代碼

    可擴展對話框通常用于用戶對界面有不同要求的場合。當供高級用戶使用或需要更多信息時,可通過某種方式的切換顯示完整對話窗體(擴展窗體)。本文將用Qt實現(xiàn)可擴展對話框,需要的可以參考一下
    2022-06-06
  • 詳解利用C語言如何實現(xiàn)簡單的內(nèi)存池

    詳解利用C語言如何實現(xiàn)簡單的內(nèi)存池

    這篇文章主要給大家介紹了關于C語言如何實現(xiàn)簡單的內(nèi)存池的相關資料,設計內(nèi)存池的目標是為了保證服務器長時間高效的運行,通過對申請空間小而申請頻繁的對象進行有效管理,減少內(nèi)存碎片的產(chǎn)生,合理分配管理用戶內(nèi)存,需要的朋友可以參考下
    2021-08-08
  • C++中std::construct()與std::destroy()的使用

    C++中std::construct()與std::destroy()的使用

    std::construct()和std::destroy()是C++ STL中的函數(shù)模板,用于在已分配的存儲區(qū)域中構造或銷毀對象,本文主要介紹了C++中std::construct()與std::destroy()的使用,感興趣的可以了解一下
    2024-02-02
  • C++實現(xiàn)LeetCode(36.驗證數(shù)獨)

    C++實現(xiàn)LeetCode(36.驗證數(shù)獨)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(36.驗證數(shù)獨),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++中字符串以及數(shù)組和指針的互相使用講解

    C++中字符串以及數(shù)組和指針的互相使用講解

    這篇文章主要介紹了C++中字符串以及數(shù)組和指針的互相使用講解,是C++入門學習中的基礎知識,需要的朋友可以參考下
    2015-09-09
  • C++ STL_vector 迭代器失效問題的解決方法

    C++ STL_vector 迭代器失效問題的解決方法

    迭代器的主要作用就是讓算法能夠不用關心底層數(shù)據(jù)結(jié)構,其底層實際就是一個指針,或者是對指針進行了封裝,迭代器失效,實際就是迭代器底層對應指針所指向的空間被銷毀了,對迭代器失效我們了解了,那么現(xiàn)在我們就分析,在vector中哪些操作會導致迭代器失效
    2023-08-08
  • 下標操作符重載模擬多維數(shù)組詳解

    下標操作符重載模擬多維數(shù)組詳解

    雖然不能直接實現(xiàn)一對下標操作符重載,但是我們可以間接模擬。思路是這樣的,先通過單下標操作返回一個具有下標操作能力的左值,對左值進行下標操作,兩個下標操作表達式聯(lián)立就實現(xiàn)了雙下標操作
    2013-09-09
  • Matlab利用垂距法實現(xiàn)提取離散坐標數(shù)據(jù)特征點

    Matlab利用垂距法實現(xiàn)提取離散坐標數(shù)據(jù)特征點

    垂距法是指根據(jù)中間頂點到其前、后兩相鄰頂點連線的距離的大小,來確定是否保留該頂點的一種線要素頂點壓縮算法。本文將利用這一算法實現(xiàn)提取離散坐標數(shù)據(jù)特征點,需要的可以參考下
    2022-04-04
  • C語言進程程序替換的實現(xiàn)詳解

    C語言進程程序替換的實現(xiàn)詳解

    為什么要進程替換?因為父進程創(chuàng)建出來的子進程和父進程擁有相同的代碼段,所以,子進程看到的代碼和父進程是一樣的。當我們想要讓子進程執(zhí)行不同的程序時候,就需要讓子進程調(diào)用進程程序替換的接口,從而讓子進程執(zhí)行不一樣的代碼
    2022-08-08
  • C++中std::count函數(shù)介紹和使用場景

    C++中std::count函數(shù)介紹和使用場景

    std::count函數(shù)是一個非常實用的算法,它可以幫助我們快速統(tǒng)計給定值在指定范圍內(nèi)的出現(xiàn)次數(shù),本文主要介紹了C++中std::count函數(shù)介紹和使用場景,感興趣的可以了解一下
    2024-02-02

最新評論

武乡县| 正宁县| 湖南省| 靖宇县| 垦利县| 洛宁县| 来凤县| 新闻| 都江堰市| 沙坪坝区| 汶上县| 太原市| 枣庄市| 岑溪市| 盐亭县| 基隆市| 兰西县| 都昌县| 巴南区| 长武县| 白水县| 常宁市| 安丘市| 吉水县| 曲阳县| 合水县| 垦利县| 云和县| 甘南县| 布拖县| 济南市| 普兰店市| 农安县| 沾益县| 全椒县| 通道| 淳化县| 东乡县| 平乐县| 花莲县| 叙永县|