RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言-指針作為函數(shù)形參類型

DS小龍哥-嵌入式技術(shù) ? 來(lái)源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-08-14 10:05 ? 次閱讀

1. 前言

C語(yǔ)言函數(shù)里最常用就是指針傳參和返回地址,特別是字符串處理中,經(jīng)常需要封裝各種功能函數(shù)完成數(shù)據(jù)處理,并且C語(yǔ)言標(biāo)準(zhǔn)庫(kù)里也提供了string.h 頭文件,里面包含了很多字符串處理函數(shù);這些函數(shù)的參數(shù)和返回值幾乎都是指針類型。這篇文章就介紹如何使用指針作為函數(shù)參數(shù)、并且使用指針作為函數(shù)返回值。

下面通過(guò)幾個(gè)示例代碼來(lái)演示用法。

2. 通過(guò)指針間接修改主函數(shù)里局部變量空間的值

#include 
#include 
void func(int *p);
int main()
{
	int a=100;
	func(&a);
	printf("a=%d\n",a); //200
	return 0;
}

void func(int *p)
{
	printf("p=%d\n",*p);
	*p=200;
}

3. 在子函數(shù)里通過(guò)指針類型間接交換main函數(shù)里局部變量空間的值

#include 
#include 
void func(int *a,int *b);
int main()
{
	int a=100,b=200;
	func(&a,&b); //func(100,200)
	printf("a=%d,b=%d\n",a,b);
	return 0;
}

void func(int *a,int *b)
{
	int c;
	c=*a;
	*a=*b;
	*b=c;
}
//return語(yǔ)句只能返回一個(gè)值
//如果函數(shù)想返回多個(gè)值,可以使用指針(形參)實(shí)現(xiàn)。

4. 函數(shù)返回指針類型

#include 
#include 
char *func(char *p);

int main()
{
	char str[]="1234567890";
	char *p;
	p=func(str);
	printf("%s\n",p); //
	return 0;
}

char *func(char *p)
{
	p+=3; //p向后偏移3個(gè)字節(jié)
	return p;
}

5. 編寫一個(gè)計(jì)算字符串長(zhǎng)度的函數(shù)

函數(shù)功能: 傳入字符串,返回字符串的長(zhǎng)度。

與strlen函數(shù)功能一樣即可。

#include 
#include 
int my_strlen(char *p); //函數(shù)聲明
int main()
{
	char buff[100];
	int len;
	
	printf("請(qǐng)輸入字符串:");
	scanf("%s",buff);
	
	len=my_strlen(buff);
	printf("len=%d\n",len);
	return 0;
}

//每個(gè)函數(shù)的功能要單一

//計(jì)算字符串長(zhǎng)度。  字符串特點(diǎn)結(jié)尾是有'\0'
//"1234567890"
int my_strlen(char *p)
{
	char *str=p;
	while(*str++!='\0'){}
	return str-p-1;
}

6. 編寫一個(gè)字符串排序函數(shù)

函數(shù)功能: 傳入字符串,在函數(shù)里實(shí)現(xiàn)字符串從大到小或者小到大排序。

注意: 從大到小或者小到大排序可以通過(guò)函數(shù)形參區(qū)分。

#include 
#include 
int my_strlen(char *p); //函數(shù)聲明
void str_sort(char *p,char flag);//函數(shù)聲明
int main()
{
	char buff[100];
	int len;
	
	printf("請(qǐng)輸入字符串:");
	scanf("%s",buff);
	
	//進(jìn)行排序
	str_sort(buff,0);
	printf("從小到大排序=%s\n",buff);
	str_sort(buff,1);
	printf("從大到小排序=%s\n",buff);
	return 0;
}

//每個(gè)函數(shù)的功能要單一

//計(jì)算字符串長(zhǎng)度。  字符串特點(diǎn)結(jié)尾是有'\0'
//"1234567890"
int my_strlen(char *p)
{
	char *str=p;
	while(*str++!='\0'){}
	return str-p-1;
}

/*
函數(shù)功能: 實(shí)現(xiàn)字符串排序.支持從小到大或者大到小
函數(shù)形參: 
	char *p  將要排序的字符串
	char flag  選擇排序方式  0表示從小到大排序  1表示大到小排序
*/
void str_sort(char *p,char flag)
{
	int len;
	int i,j,tmp;
	len=my_strlen(p);
	for(i=0;ip[j+1])
				{
					tmp=p[j];
					p[j]=p[j+1];
					p[j+1]=tmp;
				}
			}
		}
	}
}

//unsigned char a; // 0~255   占1  =8位    1111 11111
//char a; //-128 ~ +127  
;i++)>

7.變量默認(rèn)的系統(tǒng)初始化值

#include 
#include 
int a1;
int main()
{
	int a2;
	static int a3;
	printf("a1=%d\n",a1); //0
	printf("a2=%d\n",a2); //隨機(jī)值
	printf("a3=%d\n",a3); //0
	return 0;
}
/*
全局變量默認(rèn)值是0
局部變量默認(rèn)值是隨機(jī)值(系統(tǒng)沒有賦值)
靜態(tài)變量默認(rèn)值是0
*/

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7604

    瀏覽量

    136683
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4327

    瀏覽量

    62569
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    480

    瀏覽量

    70551
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言指針作為怎么改變其指向的地址

    ]?=?{1,2,3};void?fcn(參數(shù));void? main (){????int*?a;????fcn(輸入?yún)?shù)a)} 執(zhí)行完fcn后,使參數(shù)的地址改變,這個(gè)功能怎么來(lái)實(shí)現(xiàn)呢? 首先說(shuō)明結(jié)論:使用二級(jí)指針。 為了更好的理解這個(gè)問(wèn)題,我們首先來(lái)學(xué)習(xí)一下指針最經(jīng)典
    的頭像 發(fā)表于 10-09 11:54 ?5146次閱讀

    函數(shù)的實(shí)參與

    和實(shí)參出現(xiàn)不同類型時(shí),則按照不同類型數(shù)值的賦值規(guī)則進(jìn)行轉(zhuǎn)換。主調(diào)函數(shù)在在調(diào)用函數(shù)之前,應(yīng)對(duì)被調(diào)函數(shù)做原型聲明。實(shí)參向
    發(fā)表于 10-18 20:15

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

    指針作為函數(shù)參數(shù) 大多數(shù)C程序員開始使用指針時(shí)是用它們實(shí)現(xiàn)函數(shù)的參數(shù),所謂可變參數(shù)。為了理解可
    發(fā)表于 07-29 11:49 ?2711次閱讀

    C語(yǔ)言指針函數(shù)函數(shù)指針詳細(xì)介紹

    C語(yǔ)言指針函數(shù)函數(shù)指針詳細(xì)介紹。。。。。。。
    發(fā)表于 03-04 15:27 ?5次下載

    c語(yǔ)言函數(shù)指針定義,指針函數(shù)函數(shù)指針的區(qū)別

     往往,我們一提到指針函數(shù)函數(shù)指針的時(shí)候,就有很多人弄不懂。下面就由小編詳細(xì)為大家介紹C語(yǔ)言
    發(fā)表于 11-16 15:18 ?3624次閱讀

    C語(yǔ)言教程之函數(shù)指針變量與指針函數(shù)的區(qū)別(下篇)

    z=(*pfun)(x,y); //調(diào)用函數(shù)指針變量,實(shí)參x和y的值傳遞給a和b printf(“max=%dn”,z); //
    發(fā)表于 05-22 07:30 ?1985次閱讀

    C語(yǔ)言總結(jié)_數(shù)組與函數(shù)練習(xí)題

    字符串標(biāo)準(zhǔn)處理函數(shù)介紹(string.h)、指針和數(shù)組當(dāng)做函數(shù),指針定義、
    的頭像 發(fā)表于 08-14 09:36 ?827次閱讀

    C語(yǔ)言-函數(shù)的定義、聲明、傳

    C語(yǔ)言函數(shù)是非常重要的知識(shí)點(diǎn),一個(gè)完整的C語(yǔ)言程序就是由主函數(shù)和各個(gè)子
    的頭像 發(fā)表于 08-14 09:57 ?1934次閱讀

    C語(yǔ)言-函數(shù)的可變形(不定形)

    這篇文章介紹C語(yǔ)言函數(shù)的不定參數(shù)、可變參數(shù) ,實(shí)現(xiàn)printf一樣的傳效果。
    的頭像 發(fā)表于 08-14 09:58 ?2648次閱讀

    C語(yǔ)言-void類型作為萬(wàn)能指針類型

    void類型在基本數(shù)據(jù)類型里是`空類型`,`無(wú)類型`; void類型常用來(lái)當(dāng)做函數(shù)的返回值,
    的頭像 發(fā)表于 08-14 10:04 ?1796次閱讀

    數(shù)組/指針的傳問(wèn)題

    自定義函數(shù)類型,要和函數(shù)調(diào)用中傳過(guò)去的實(shí)參類型相對(duì)應(yīng)
    的頭像 發(fā)表于 08-17 10:37 ?1076次閱讀

    指針進(jìn)階第五站:函數(shù)指針!

    定義一個(gè)函數(shù)指針,指向的函數(shù)有兩個(gè)int并且返回一個(gè)函數(shù)
    發(fā)表于 08-17 15:58 ?530次閱讀

    C語(yǔ)言函數(shù)參數(shù)介紹

    C語(yǔ)言數(shù)組元素作函數(shù)實(shí)參 數(shù)組元素可以用作函數(shù)實(shí)參,不能用作。
    的頭像 發(fā)表于 03-10 14:30 ?2371次閱讀

    C語(yǔ)言數(shù)組元素的指針

    C語(yǔ)言調(diào)用函數(shù)時(shí)虛實(shí)結(jié)合的方法都是采用“值傳遞”方式,當(dāng)用變量名作為函數(shù)參數(shù)時(shí)傳遞的是變量的值,當(dāng)用數(shù)組名
    的頭像 發(fā)表于 03-10 14:45 ?893次閱讀

    函數(shù)類型函數(shù)指針類型的區(qū)別

    平時(shí)用的更多的是函數(shù)指針類型,比如作為函數(shù)參數(shù)傳入回調(diào)函數(shù)等等。實(shí)際上
    發(fā)表于 10-24 14:27 ?390次閱讀
    RM新时代网站-首页