国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

玩轉(zhuǎn)指針,手撕c語言——(指針進(jìn)階)

genedna / 1450人閱讀

摘要:函數(shù)的返回值為指針就按照字面意思,指針函數(shù)的定義顧名思義,指針函數(shù)即返回指針的函數(shù)。

前言

本次博客內(nèi)容為指針進(jìn)階,在上次指針基礎(chǔ)的內(nèi)容上做了延申
有需求的可以再去看一看上一篇的指針基礎(chǔ)
https://blog.csdn.net/qq_59708493/article/details/120606282
本篇內(nèi)容建議收藏后反復(fù)食用;

指針與函數(shù)

前面學(xué)習(xí)函數(shù)學(xué)到,函數(shù)參數(shù)可以為 int、char、float 等,所有操作都只在函數(shù)體內(nèi)有效(除對指針的操作外),那么我們來學(xué)習(xí)一下指針作為函數(shù)參數(shù)。

函數(shù)的返回值為指針

就按照字面意思,
1.指針函數(shù)的定義

顧名思義,指針函數(shù)即返回指針的函數(shù)。其一般定義形式如下:

類型名 *函數(shù)名(函數(shù)參數(shù)表列);

其中,后綴運(yùn)算符括號“()”表示這是一個(gè)函數(shù),其前綴運(yùn)算符星號“*”表示此函數(shù)為指針型函數(shù),其函數(shù)值為指針,即它帶回來的值的類型為指針,當(dāng)調(diào)用這個(gè)函數(shù)后,將得到一個(gè)“指向返回值為…的指針(地址),“類型名”表示函數(shù)返回的指針指向的類型”。

int s;void mian(){	int *r = sum(10, 9);	printf("10 + 9 + %d", *r);}int *sum(int x, int y){	s = x + y;	return &s;}

作為函數(shù)參數(shù)的指針

#includeint f(int *p);int main(void){	int i=6;	printf("&i=%p/n",&i);	f(&i);	return 0; }  int f(int *p) { 	printf(" p=%p/n",p); }

輸出的結(jié)果是一樣的

&i=000000000062FE1C p=000000000062FE1C

我們利用上一篇文章中的指針基礎(chǔ)再來分析一下這一串代碼

#includeint main(void){	int i=6;	int*p=&i;	printf("%p/n",p);	printf("%p/n",&i);	printf("%d/n",*p);	return 0;}

這串代碼的結(jié)果

000000000062FE14000000000062FE146--------------------------------Process exited after 0.03068 seconds with return value 0請按任意鍵繼續(xù). . .

代碼中我們定義int*p=&i
p時(shí)指針變量,是一個(gè)=&i的地址,或者說p是變量i的指針

再來看一個(gè)經(jīng)典的例子
利用函數(shù)交換變量a,b的值

#includeint swap(int*x,int *y);int main(){	int a=7,b=8;	swap(&a,&b);	printf("a=%d,b=%d",a,b);	return 0;}int swap(int*x,int *y){	int t;	t=*x;	*x=*y;	*y=t;	return 0;}

運(yùn)行結(jié)果為

a=8,b=7--------------------------------Process exited after 0.0297 seconds with return value 0請按任意鍵繼續(xù). . .

注:當(dāng)函數(shù)參數(shù)為指針時(shí),當(dāng)我i們調(diào)用這個(gè)函數(shù)時(shí)應(yīng)該給他一個(gè)變量的地址;而不是變量本身;具體為什么,參考上述代碼

指針函數(shù)可以改變變量的值

#includeint f(int *p);int f(int k);int main(){	int a=9;	printf("%p/n",&a); 	f(&a);	f(a);	return 0; }  int f(int *p) { 	printf("p1=%p/n",p); 	*p=11; 	printf("p2=%p/n",p); 	return 0;  } int f(int k){	printf("k=%d/n",k);	return 0;}

可以在你的編譯器上運(yùn)行一下這個(gè)程序

000000000062FE1Cp1=000000000062FE1Cp2=000000000062FE1Ck=11--------------------------------Process exited after 0.02982 seconds with return value 0請按任意鍵繼續(xù). . .

有沒有很神奇
所以說通過參數(shù)為指針的函數(shù)可以改變一個(gè)變量的值

數(shù)組變量是特殊的指針

數(shù)組變量本身表達(dá)地址(但是數(shù)組單元表達(dá)的是變量,)
[ ]運(yùn)算符可以對數(shù)組做,也可以對指針做;
例如

#includeint main(){	int a[]={1,2,5,9,63,8,7,3,9,3,8,63,9,5,596,9};	int*p=a;	printf("%d/n",p[3]);	printf("%d/n",a[3]);	return 0; } 

運(yùn)行結(jié)果p[3]和a[3]的相同;

99--------------------------------Process exited after 0.03134 seconds with return value 0請按任意鍵繼續(xù). . .

同樣的,*運(yùn)算符也可以對數(shù)組使用

#includeint main(){	int a[]={1000,2,5,9,63,8,7,3,9,3,8,63,9,5,596,9};	int*p=a;	printf("%d/n",p[3]);	printf("%d/n",*a);	return 0; } 

運(yùn)行結(jié)果

91000--------------------------------Process exited after 0.03093 seconds with return value 0請按任意鍵繼續(xù). . .

數(shù)組變量是const的指針,所以不能被賦值

指針與const

指針是const

如果定義指針時(shí)int* const p
意思是說指針變量p不可以修改
例如

#includeint main(){	int i=33;	int *const p=&i;	printf("%d/n",*p);	i=22;	printf("%d/n",*p); } 

是可以運(yùn)行的
而`

#includeint main(){	int i=33;	int *const p=&i;	printf("%d/n",*p);	i=22;	printf("%d/n",*p);	p++;	printf("%d",*p); } 

是無法運(yùn)行的

9	3	E:/PTA/未命名1.cpp	[Error] increment of read-only variable "p"

所指是const

所指是const有兩種類型
1.const int *p
2.int const p
他們表達(dá)的意思相同
都是指
p不可改變
所以將上面代碼的int const p改為int constp
代碼便可以運(yùn)行

#includeint main(){	int i=33;	int const * p=&i;	printf("%d/n",*p);	i=22;	printf("%d/n",*p);	p++;	printf("%d",*p); } 
33226487576--------------------------------Process exited after 0.03231 seconds with return value 0請按任意鍵繼續(xù). . .

指針計(jì)算

上一篇指針基礎(chǔ)已經(jīng)講過大部分指針運(yùn)算內(nèi)容
我們再來補(bǔ)充一點(diǎn)東西

p++
取出p所致=指的那個(gè)數(shù)據(jù)來,后將p移到下一個(gè)位置
++的優(yōu)先級高于

我們可以利用*p++完成一些事情

#includeint main(){	int a[]={4,8,8,5,8,52,9,52,8,8,5,8,5,8,0};	int *p=a;	while(*p!=0)	{		printf("%d ",*p);		*p++;	}	printf("/n");	for(p=a;*p!=0;*p++)		printf("%d ",*p);	}

我們可以用while和for循環(huán)實(shí)現(xiàn)數(shù)組的遍歷;

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/121851.html

相關(guān)文章

  • 手撕C語言進(jìn)階---字符串和內(nèi)存函數(shù)(詳解+實(shí)現(xiàn)+原碼)

    摘要:自己實(shí)現(xiàn)時(shí)返回值可根據(jù)實(shí)際情況而定源字符串必須以結(jié)束。語言中給了一些長度受限的字符串函數(shù),而前面的函數(shù)是長度不受限的字符串函數(shù)。拷貝個(gè)字符從源字符串到目標(biāo)空間。 目錄 字符函數(shù)和字符串函數(shù) 函數(shù)介紹 strlen strcpy strcat strcmp strncpy ?strncat s...

    vslam 評論0 收藏0
  • C語言玩轉(zhuǎn)指針——關(guān)于指針,你需要掌握的基礎(chǔ)知識!

    摘要:如果我們要將的地址保存到中,我們需要我們給指針變量相應(yīng)的類型。類型的指針是為了存放類型變量的地址這里可以看到,指針的定義方式是類型名指針變量名。如下最后本文介紹的是指針的基礎(chǔ)知識,往后還會繼續(xù)深入講解指 ...

    zebrayoung 評論0 收藏0
  • C語言玩轉(zhuǎn)結(jié)構(gòu)體——結(jié)構(gòu)體的那點(diǎn)事兒!

    摘要:一結(jié)構(gòu)體的聲明與定義結(jié)構(gòu)體的聲明結(jié)構(gòu)是一些值的集合,這些值稱為成員變量。但是結(jié)構(gòu)體變量的變量名并不是指向該結(jié)構(gòu)體的地址,所以要使用取地址運(yùn)算符才能獲取其地址。因此,結(jié)構(gòu)體傳參的時(shí)候,要傳結(jié)構(gòu)體的地址。 ...

    jeffrey_up 評論0 收藏0
  • C語言進(jìn)階指針進(jìn)階

    摘要:本章節(jié)在此基礎(chǔ)上,對語言階段指針進(jìn)行更深層次的研究。數(shù)組指針的類型由數(shù)組類型決定,先找出數(shù)組的類型去掉名就是類型。相當(dāng)于數(shù)組指針?biāo)赶驍?shù)組的數(shù)組名。數(shù)組指針指向整個(gè)數(shù)組,將其看作二維數(shù)組并解引用得到一行的首元素,從而遍歷訪問。 ...

    浠ラ箍 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<