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

    文章

    7528

    浏览量

    128454
  • 字符串
    +关注

    关注

    1

    文章

    550

    浏览量

    20109
  • 函数
    +关注

    关注

    3

    文章

    3866

    浏览量

    61308
收藏 人收藏

    评论

    相关推荐

    UG练习题

    UG练习题,学校老师给的还不错
    发表于 07-18 21:10

    C语言典型练习题及答案

    C语言典型练习题及答案 c语言初学者必备
    发表于 08-10 12:34

    multisim练习题

    大家有没有multisim的练习题目和教程啊?想学这方面的知识,还望各位大神帮帮忙!小弟实在感激不尽!有的话麻烦发到我的邮箱1400769604@qq.com谢谢了。
    发表于 10-13 00:51

    全国计算机等级考试一级练习题,全国计算机等级考试一级练习题 精选资料分享

    《全国计算机等级考试一级练习题》由会员分享,可在线阅读,更多相关《全国计算机等级考试一级练习题(8页珍藏版)》请在人人文库网上搜索。1、全国计算机等级考试一级练习题计算机应用基础1一、单选题1
    发表于 09-13 06:07

    电容器练习题

    电容器练习题
    发表于 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次下载
    C<b class='flag-5'>语言</b>编程的经典<b class='flag-5'>练习题</b>资料免费下载

    C语言程序设计上机考试练习题和答案免费下载

    本文档的主要内容详细介绍的是C语言程序设计上机考试练习题和答案免费下载
    发表于 10-28 08:00 12次下载

    复变函数与积分变换练习题及解答

    复变函数与积分变换练习题及解答
    发表于 06-27 09:19 4次下载

    C语言总结_数组全方位练习

    C语言数组练习题:涉及到数组插入、数组删除、数组下标数据的左移右移、
    的头像 发表于 08-14 09:34 665次阅读

    Java编程思想练习题源码

    Java编程思想练习题源码,配合《Java编程思想》进行学习。
    发表于 09-26 14:24 0次下载

    Thinking In Java练习题源码

    Thinking In Java 练习题源码文件分享
    发表于 09-26 14:23 0次下载