字符串標(biāo)準(zhǔn)處理函數(shù)介紹(string.h)、指針和數(shù)組當(dāng)做函數(shù)形參,指針定義、函數(shù)返回指針、void類型定義指針、類型強(qiáng)制轉(zhuǎn)換、常量聲明、extern外邊引用聲明關(guān)鍵字。
1. 總結(jié)字符串相關(guān)的處理函數(shù)
string.h里常用的字符串處理相關(guān)函數(shù)。
字符串: string.h
void *memcpy(void *restrict, const void *restrict, size_t);
int memcmp(const void *, const void *, size_t);
void *memset(void *, int, size_t);
char *strcat(char *restrict, const char *restrict);
int strcmp(const char *, const char *);
char *strcpy(char *restrict, const char *restrict);
size_t strlen(const char *);
char *strncat(char *restrict, const char *restrict, size_t);
int strncmp(const char *, const char *, size_t);
char *strncpy(char *restrict, const char *restrict, size_t);
char *strstr(const char *, const char *);
格式化打印(轉(zhuǎn)換)函數(shù):
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
int sscanf(const char *str, const char *format, ...);
說(shuō)明: char p; // a=aa; //乘法 char *p; //定義指針
指針用于代表一個(gè)地址。
指針可以當(dāng)做數(shù)組使用,數(shù)組無(wú)法當(dāng)做指針使用。
數(shù)組的名稱: 就是首地址
在C語(yǔ)言里任何類型的指針(地址)是4個(gè)字節(jié)
2. 函數(shù)參數(shù): 指針與數(shù)組類型
函數(shù)的形參: 指針類型與數(shù)組類型
示例代碼: ()
#include //標(biāo)準(zhǔn)輸入輸出
#include //字符串處理頭文件
int my_strlen1(char buff[]);
int my_strlen2(char *buff);
int main(int argc,char **argv)
{
char str[]="1234567890";
int len1=my_strlen1(str);
int len2=my_strlen2(str);
printf("%d\n",len1);
printf("%d\n",len2);
return 0;
}
/*
函數(shù)功能:計(jì)算字符串的長(zhǎng)度
char buff[] :傳入是數(shù)組類型,也就是傳入的是地址
*/
int my_strlen1(char buff[])
{
int cnt=0;
while(buff[cnt]!='\0')
{
cnt++;
}
return cnt;
}
/*
函數(shù)功能:計(jì)算字符串的長(zhǎng)度
char *str :傳入是字符指針類型,也就是傳入的是地址
*/
int my_strlen2(char *buff)
{
int cnt=0;
while(buff[cnt]!='\0')
{
cnt++;
}
return cnt;
}
3. 數(shù)組當(dāng)做函數(shù)形參的問(wèn)題
示例:
#include //標(biāo)準(zhǔn)輸入輸出
#include //字符串處理頭文件
void my_func1(char buff[100]);
void my_func2(char *buff);
void sum(int a);
int main(int argc,char **argv)
{
int a=100;
char str[100]="12345";
my_func1(str);
my_func2(str);
sum(a);
return 0;
}
//char buff[100] 函數(shù)形參里是地址不會(huì)申請(qǐng)空間
void my_func1(char buff[100])
{
char buff1[100];
printf("sizeof=%d\n",sizeof(buff));
printf("sizeof1=%d\n",sizeof(buff1));
}
void my_func2(char *buff)
{
printf("sizeof=%d\n",sizeof(buff));
}
4. 指針定義: 存放地址
#include //標(biāo)準(zhǔn)輸入輸出
#include //字符串處理頭文件
int main(int argc,char **argv)
{
int a=100;
char str[100]="123456";
char *p; //定義的是一個(gè)指針(地址)
p=str; //可以賦值
//p=&a; //可以賦值
printf("%p\n",&a);
printf("%p\n",str);
printf("%p\n",p);
printf("%s\n",str);
printf("%s\n",p);
return 0;
}
5. 函數(shù)形參和返回值: 都是地址
(1)數(shù)組類型可以當(dāng)做函數(shù)形參。void func(char buff[]){}
(2)數(shù)組類型不能當(dāng)做函數(shù)返回值類型。char buff[] func(void){} 錯(cuò)誤的
函數(shù)如果要返回地址類型: 必須使用指針類型。
函數(shù)形參如果要傳入地址類型: 可以使用指針類型或者數(shù)組類型。
示例代碼:
#include //標(biāo)準(zhǔn)輸入輸出
#include //字符串處理頭文件
char *func(char buff[]);
int main(int argc,char **argv)
{
char str[]="12345";
char *str1=func(str);
printf("%p\n",str);
printf("%p\n",str1);
printf("%s\n",str1);
return 0;
}
//形參是一個(gè)數(shù)組類型(char的地址)
//返回值是一個(gè)char類型的地址
char *func(char buff[])
{
return buff;
}
?示例代碼(局部地址是不能返回的)
#include //標(biāo)準(zhǔn)輸入輸出
#include //字符串處理頭文件
char *func(void);
int func1(void);
int main(int argc,char **argv)
{
char *str=func();
printf("str=%s\n",str);
printf("str2=%p\n",str);
int a=func1();
printf("a=%d\n",a);
return 0;
}
char *func(void)
{
char str[]="5thgtrgbtfbfgbgf";
//static char str[]="5thgtrgbtfbfgbgf";
//加了靜態(tài)關(guān)鍵字之后,數(shù)據(jù)空間永久保留(與main函數(shù)生命周期一樣)
printf("str1=%p\n",str);
return str; //將數(shù)據(jù)空間的地址返回,將地址賦值給接收返回值的指針變量
}
int func1(void)
{
int a=88;
return a; //a變量里的數(shù)據(jù)取出來(lái)返回去,賦值給接收返回值的變量。
}
6. void*類型指針
#include //標(biāo)準(zhǔn)輸入輸出
#include //字符串處理頭文件
void func(void *p);
int main(int argc,char **argv)
{
int buff[100];
char str[100];
func(buff);
func(str);
return 0;
}
/*
void *p:傳入的形參自適應(yīng)
*/
void func(void *p)
{
}
//void a; //語(yǔ)法是錯(cuò)誤的
//int a; //定義一個(gè)int類型變量,空間是4個(gè)字節(jié)
//void *p //指針本身是存放地址,任何類型的指針都是4個(gè)字節(jié)
7. 強(qiáng)制轉(zhuǎn)換
強(qiáng)制轉(zhuǎn)換只是欺騙編譯器,消除警告,不會(huì)改變本身的數(shù)據(jù)類型。
示例代碼: 指針之間的強(qiáng)制轉(zhuǎn)換
#include //標(biāo)準(zhǔn)輸入輸出
#include //字符串處理頭文件
void func(int *p);
int main(int argc,char **argv)
{
char str[]="123456789";
func((int*)str); //強(qiáng)制轉(zhuǎn)換語(yǔ)法
return 0;
}
/*
void *p:傳入的形參自適應(yīng)
*/
void func(int *p)
{
char *str=(char*)p;
printf("str=%s\n",str);
}
8. 常量聲明關(guān)鍵字: const
#include //標(biāo)準(zhǔn)輸入輸出
#include //字符串處理頭文件
int main(int argc,char **argv)
{
char buff[100]="123";
const char *p=buff; //表示p指向的buff的空間數(shù)據(jù)是不能修改的
//*p='A'; //不能修改 賦值是錯(cuò)誤的
p[0]='A'; //不能修改 賦值是錯(cuò)誤的
//const int a=99;//定義a是只讀變量。
//a=88; //賦值是錯(cuò)誤的
return 0;
}
9. extern外部聲明關(guān)鍵字
主要是用在頭文件里,多文件編程中。
#include //標(biāo)準(zhǔn)輸入輸出
#include //字符串處理頭文件
extern void func(void);//外部引用聲明
extern int data; //外部引用聲明
int main(int argc,char **argv)
{
func();
printf("%d\n",data);
return 0;
}
int data=888; //定義變量
void func(void)
{
printf("123\n");
}
審核編輯:湯梓紅
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7594瀏覽量
135864 -
字符串
+關(guān)注
關(guān)注
1文章
575瀏覽量
20470 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4277瀏覽量
62325
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論