1. 前言
C語言函數里最常用就是指針傳參和返回地址,特別是字符串處理中,經常需要封裝各種功能函數完成數據處理,并且C語言標準庫里也提供了string.h
頭文件,里面包含了很多字符串處理函數;這些函數的參數和返回值幾乎都是指針類型。這篇文章就介紹如何使用指針作為函數參數、并且使用指針作為函數返回值。
下面通過幾個示例代碼來演示用法。
2. 通過指針間接修改主函數里局部變量空間的值
#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. 在子函數里通過指針類型間接交換main函數里局部變量空間的值
#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語句只能返回一個值
//如果函數想返回多個值,可以使用指針(形參)實現。
4. 函數返回指針類型
#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個字節
return p;
}
5. 編寫一個計算字符串長度的函數
函數功能: 傳入字符串,返回字符串的長度。
與strlen函數功能一樣即可。
#include
#include
int my_strlen(char *p); //函數聲明
int main()
{
char buff[100];
int len;
printf("請輸入字符串:");
scanf("%s",buff);
len=my_strlen(buff);
printf("len=%d\n",len);
return 0;
}
//每個函數的功能要單一
//計算字符串長度。 字符串特點結尾是有'\0'
//"1234567890"
int my_strlen(char *p)
{
char *str=p;
while(*str++!='\0'){}
return str-p-1;
}
6. 編寫一個字符串排序函數
函數功能: 傳入字符串,在函數里實現字符串從大到小或者小到大排序。
注意: 從大到小或者小到大排序可以通過函數形參區分。
#include
#include
int my_strlen(char *p); //函數聲明
void str_sort(char *p,char flag);//函數聲明
int main()
{
char buff[100];
int len;
printf("請輸入字符串:");
scanf("%s",buff);
//進行排序
str_sort(buff,0);
printf("從小到大排序=%s\n",buff);
str_sort(buff,1);
printf("從大到小排序=%s\n",buff);
return 0;
}
//每個函數的功能要單一
//計算字符串長度。 字符串特點結尾是有'\0'
//"1234567890"
int my_strlen(char *p)
{
char *str=p;
while(*str++!='\0'){}
return str-p-1;
}
/*
函數功能: 實現字符串排序.支持從小到大或者大到小
函數形參:
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.變量默認的系統初始化值
#include
#include
int a1;
int main()
{
int a2;
static int a3;
printf("a1=%d\n",a1); //0
printf("a2=%d\n",a2); //隨機值
printf("a3=%d\n",a3); //0
return 0;
}
/*
全局變量默認值是0
局部變量默認值是隨機值(系統沒有賦值)
靜態變量默認值是0
*/
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
C語言
+關注
關注
180文章
7604瀏覽量
136692 -
函數
+關注
關注
3文章
4327瀏覽量
62573 -
指針
+關注
關注
1文章
480瀏覽量
70551
發布評論請先 登錄
相關推薦
C語言指針作為形參怎么改變其指向的地址
]?=?{1,2,3};void?fcn(參數);void? main (){????int*?a;????fcn(輸入參數a)} 執行完fcn后,使參數的地址改變,這個功能怎么來實現呢? 首先說明結論:使用二級指針。 為了更好的理解這個問題,我們首先來學習一下指針最經典
C語言教程之函數指針變量與指針函數的區別(下篇)
z=(*pfun)(x,y); //調用函數指針變量,實參x和y的值傳遞給形參a和b
printf(“max=%dn”,z); //形
發表于 05-22 07:30
?1986次閱讀
評論