那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言總結_數組與函數傳參練習題

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2022-08-14 09:36 ? 次閱讀

字符串標準處理函數介紹(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
收藏 人收藏

    評論

    相關推薦

    UG練習題

    UG練習題,學校老師給的還不錯
    發表于 07-18 21:10

    C語言典型練習題及答案

    C語言典型練習題及答案 c語言初學者必備
    發表于 08-10 12:34

    multisim練習題

    大家有沒有multisim的練習題目和教程啊?想學這方面的知識,還望各位大神幫幫忙!小弟實在感激不盡!有的話麻煩發到我的郵箱1400769604@qq.com謝謝了。
    發表于 10-13 00:51

    電容器練習題

    電容器練習題
    發表于 11-16 11:36 ?50次下載

    Verilog HDL練習題

    Verilog HDL練習題
    發表于 11-03 16:47 ?193次下載

    C語言基礎習題

    c語言練習題。。。。。。。。。。。。。。。。。。。。。
    發表于 11-12 15:02 ?0次下載

    高頻諧振練習題

    高頻諧振練習題,有需要的可以下載看看,學習一下!
    發表于 12-18 11:06 ?1次下載

    子網劃分練習題

    子網劃分練習題,老師自己出的題。
    發表于 06-17 17:40 ?0次下載

    C語言編程的經典練習題資料免費下載

    本文檔的主要內容詳細介紹的是C語言編程的經典練習題資料免費下載。
    發表于 06-04 08:00 ?16次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>編程的經典<b class='flag-5'>練習題</b>資料免費下載

    C語言程序設計上機考試練習題和答案免費下載

    本文檔的主要內容詳細介紹的是C語言程序設計上機考試練習題和答案免費下載
    發表于 10-28 08:00 ?15次下載

    復變函數與積分變換練習題及解答

    復變函數與積分變換練習題及解答
    發表于 06-27 09:19 ?5次下載

    C語言總結_數組全方位練習

    C語言數組練習題:涉及到數組插入、數組刪除、數組
    的頭像 發表于 08-14 09:34 ?954次閱讀

    C語言-函數的定義、聲明、

    C語言函數是非常重要的知識點,一個完整的C語言程序就是由主函數和各個子
    的頭像 發表于 08-14 09:57 ?2008次閱讀

    Java編程思想練習題源碼

    Java編程思想練習題源碼,配合《Java編程思想》進行學習。
    發表于 09-26 14:24 ?0次下載

    Thinking In Java練習題源碼

    Thinking In Java 練習題源碼文件分享
    發表于 09-26 14:23 ?0次下載
    至尊百家乐娱乐场开户注册| 八运24山阴阳| 24山在风水学中应用| 百家乐007| 集结号棋牌下载| 洛阳市| 百家乐官网赌场代理| 大东方百家乐游戏| 全讯网赢足一世| 德昌县| LV百家乐官网赢钱LV| 海王星百家乐技巧| 博彩公司评级| 山西百家乐官网用品| 百家乐扑克片礼服| 网上棋牌是真的吗| 百家乐官网巴黎| 百家乐是不是有假| 大发888大发888官网| 澳门百家乐官网先赢后输| 在线百家乐安卓| 亲朋棋牌捕鱼辅助| 百家乐官网送1000 | 宁海县| 玩百家乐官网最好方法| 专业百家乐分析| 大发888怎么代充| 真人百家乐官网什么平台| 百家乐官方游戏| 最新六合彩开奖结果| 百家乐官网娱乐网真钱游戏| 华盛顿百家乐的玩法技巧和规则| 成人百家乐的玩法技巧和规则| 六枝特区| 天博百家乐官网的玩法技巧和规则| 威尼斯人娱乐场怎么样| 百家乐官网园zyylc| 百家乐书| 澳门凯旋门娱乐城| 百家乐官网筹码套装包邮| 百家乐赌博公司|