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

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

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

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

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

字符串標(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");
}
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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

    文章

    7594

    瀏覽量

    135864
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    575

    瀏覽量

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

    關(guān)注

    3

    文章

    4277

    瀏覽量

    62325
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    UG練習(xí)題

    UG練習(xí)題,學(xué)校老師給的還不錯(cuò)
    發(fā)表于 07-18 21:10

    C語(yǔ)言典型練習(xí)題及答案

    C語(yǔ)言典型練習(xí)題及答案 c語(yǔ)言初學(xué)者必備
    發(fā)表于 08-10 12:34

    multisim練習(xí)題

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

    電容器練習(xí)題

    電容器練習(xí)題
    發(fā)表于 11-16 11:36 ?50次下載

    Verilog HDL練習(xí)題

    Verilog HDL練習(xí)題
    發(fā)表于 11-03 16:47 ?193次下載

    C語(yǔ)言基礎(chǔ)習(xí)題

    c語(yǔ)言練習(xí)題。。。。。。。。。。。。。。。。。。。。。
    發(fā)表于 11-12 15:02 ?0次下載

    高頻諧振練習(xí)題

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

    子網(wǎng)劃分練習(xí)題

    子網(wǎng)劃分練習(xí)題,老師自己出的題。
    發(fā)表于 06-17 17:40 ?0次下載

    C語(yǔ)言編程的經(jīng)典練習(xí)題資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語(yǔ)言編程的經(jīng)典練習(xí)題資料免費(fèi)下載。
    發(fā)表于 06-04 08:00 ?16次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>編程的經(jīng)典<b class='flag-5'>練習(xí)題</b>資料免費(fèi)下載

    C語(yǔ)言程序設(shè)計(jì)上機(jī)考試練習(xí)題和答案免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語(yǔ)言程序設(shè)計(jì)上機(jī)考試練習(xí)題和答案免費(fèi)下載
    發(fā)表于 10-28 08:00 ?15次下載

    復(fù)變函數(shù)與積分變換練習(xí)題及解答

    復(fù)變函數(shù)與積分變換練習(xí)題及解答
    發(fā)表于 06-27 09:19 ?5次下載

    C語(yǔ)言總結(jié)_數(shù)組全方位練習(xí)

    C語(yǔ)言數(shù)組練習(xí)題:涉及到數(shù)組插入、數(shù)組刪除、數(shù)組
    的頭像 發(fā)表于 08-14 09:34 ?856次閱讀

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

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

    Java編程思想練習(xí)題源碼

    Java編程思想練習(xí)題源碼,配合《Java編程思想》進(jìn)行學(xué)習(xí)。
    發(fā)表于 09-26 14:24 ?0次下載

    Thinking In Java練習(xí)題源碼

    Thinking In Java 練習(xí)題源碼文件分享
    發(fā)表于 09-26 14:23 ?0次下載