字符串標準處理函數介紹(string.h)、指針和數組當做函數形參,指針定義、函數返回指針、void類型定義指針、類型強制轉換、常量聲明、extern外邊引用聲明關鍵字。
1. 總結字符串相關的處理函數
string.h里常用的字符串處理相關函數。
字符串: 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 *);
格式化打印(轉換)函數:
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, ...);
說明: char p; // a=aa; //乘法 char *p; //定義指針
指針用于代表一個地址。
指針可以當做數組使用,數組無法當做指針使用。
數組的名稱: 就是首地址
在C語言里任何類型的指針(地址)是4個字節
2. 函數參數: 指針與數組類型
函數的形參: 指針類型與數組類型
示例代碼: ()
#include //標準輸入輸出
#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;
}
/*
函數功能:計算字符串的長度
char buff[] :傳入是數組類型,也就是傳入的是地址
*/
int my_strlen1(char buff[])
{
int cnt=0;
while(buff[cnt]!='\0')
{
cnt++;
}
return cnt;
}
/*
函數功能:計算字符串的長度
char *str :傳入是字符指針類型,也就是傳入的是地址
*/
int my_strlen2(char *buff)
{
int cnt=0;
while(buff[cnt]!='\0')
{
cnt++;
}
return cnt;
}
3. 數組當做函數形參的問題
示例:
#include //標準輸入輸出
#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] 函數形參里是地址不會申請空間
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 //標準輸入輸出
#include //字符串處理頭文件
int main(int argc,char **argv)
{
int a=100;
char str[100]="123456";
char *p; //定義的是一個指針(地址)
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. 函數形參和返回值: 都是地址
(1)數組類型可以當做函數形參。void func(char buff[]){}
(2)數組類型不能當做函數返回值類型。char buff[] func(void){} 錯誤的
函數如果要返回地址類型: 必須使用指針類型。
函數形參如果要傳入地址類型: 可以使用指針類型或者數組類型。
示例代碼:
#include //標準輸入輸出
#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;
}
//形參是一個數組類型(char的地址)
//返回值是一個char類型的地址
char *func(char buff[])
{
return buff;
}
?示例代碼(局部地址是不能返回的)
#include //標準輸入輸出
#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";
//加了靜態關鍵字之后,數據空間永久保留(與main函數生命周期一樣)
printf("str1=%p\n",str);
return str; //將數據空間的地址返回,將地址賦值給接收返回值的指針變量
}
int func1(void)
{
int a=88;
return a; //a變量里的數據取出來返回去,賦值給接收返回值的變量。
}
6. void*類型指針
#include //標準輸入輸出
#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:傳入的形參自適應
*/
void func(void *p)
{
}
//void a; //語法是錯誤的
//int a; //定義一個int類型變量,空間是4個字節
//void *p //指針本身是存放地址,任何類型的指針都是4個字節
7. 強制轉換
強制轉換只是欺騙編譯器,消除警告,不會改變本身的數據類型。
示例代碼: 指針之間的強制轉換
#include //標準輸入輸出
#include //字符串處理頭文件
void func(int *p);
int main(int argc,char **argv)
{
char str[]="123456789";
func((int*)str); //強制轉換語法
return 0;
}
/*
void *p:傳入的形參自適應
*/
void func(int *p)
{
char *str=(char*)p;
printf("str=%s\n",str);
}
8. 常量聲明關鍵字: const
#include //標準輸入輸出
#include //字符串處理頭文件
int main(int argc,char **argv)
{
char buff[100]="123";
const char *p=buff; //表示p指向的buff的空間數據是不能修改的
//*p='A'; //不能修改 賦值是錯誤的
p[0]='A'; //不能修改 賦值是錯誤的
//const int a=99;//定義a是只讀變量。
//a=88; //賦值是錯誤的
return 0;
}
9. extern外部聲明關鍵字
主要是用在頭文件里,多文件編程中。
#include //標準輸入輸出
#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語言
+關注
關注
180文章
7614瀏覽量
137714 -
字符串
+關注
關注
1文章
585瀏覽量
20603 -
函數
+關注
關注
3文章
4346瀏覽量
62971
發布評論請先 登錄
相關推薦
評論