坐牢第九天 20240712

一.作业

1> 自定义函数(my_strlen)实现strlen函数的功能

//自定义函数(my_strlen)实现strlen函数的功能
int my_strlen(char*arr)
{
   if(*arr=='\0')
    {
        return 0;
    }
    else
    {
        return 1+my_strlen(arr+1);
    }
}

2> 自定义函数(my_strcpy)实现strcpy函数的功能

//自定义函数(my_strcpy)实现strcpy函数的功能
void my_strcpy(char*arr, char*brr)
{
    while(*brr!='\0')
  {
    *arr++=*brr++;
  }
  *arr='\0';
}

3> 自定义函数(my_strcmp)实现strcmo函数的功能

//自定义函数(my_strcmp)实现strcmp函数的功能
int my_strcmp(char*arr,char*brr)
{
    int n=0;
    while(n==0)
    {    
       n= *arr++ - *brr++;  
    }
    return n;
}

4> 自定义函数(my_strcat)实现strcat函数的功能

//自定义函数(my_strcat)实现strcat函数的功能
void my_strcat(char*arr,char*brr)
{
    while(*brr!='\0')
    {
       if(*arr=='\0'&&*brr!='\0')
       {
         *arr++=*brr++;
       }else
       { 
         arr++; 
       }
    }
}

5> 自定义函数(my_strstr)实现求src字符串中是否包含子串dest字符串

//自定义函数(my_strstr)实现strstr函数的功能
char*my_strstr(const char*arr,const char*brr)
{
    if(!*brr)
    {
        return (char*)arr;
    }
    for(const char*h=arr;*h!='\0';h++)
    {
        char*temp_h=h;
        char*temp_n=brr;
        while(*temp_h&&*temp_n&&*temp_h++==*temp_n++);
        if(!*temp_n)
        {
            return (char*)h;
        }
    }
    return NULL;
}

补充:atio自定义

二.笔记

1.指针指向数组

1.1指针与数组的关系

1> 一维数组的数组名,本质上是一个该数组的第一个元素的地址

int arr[5]; arr <==> &arr[0]

2> 数组名是一个地址常量,不能被重新赋值,但是,数组名可以进行偏移

3> 二维数组的数组名,从数值上来说也是一个该数组第一个元素的地址

int arr[3][4]; arr <==> &arr[0] arr[0] <==> &arr[0][0] arr[1] <==>&arr[1][0]

3.2 指针与一维数组关系实现

1> 指针与一维数组的关系

#include<stdio.h>
 
int main(int argc, const char *argv[])
{
	//定义一个一维数组
	int arr[] = {3,8,3,2,4};
	int len = sizeof(arr)/sizeof(arr[0]);    //求数组长度
 
	//定义指针指向一维数组
	int *ptr = arr;             //int *ptr = &arr[0];
 
	//数据输出方式1,从值的角度
	printf("数据元素分别是:");
	for(int i=0; i<len; i++)
	{
		printf("%d\t", arr[i]);
	}
	printf("\n");
 
	//输出方式2:从数组名的角度
	printf("数据元素分别是:");
	for(int i=0; i<len; i++)
	{
		printf("%d\t", *(arr+i) );
	}
	printf("\n");
 
	//输出方式3:从指针变量的角度
	printf("数据元素分别是:");
	for(int i=0; i<len; i++)
	{
		printf("%d\t", *(ptr+i) );
	}
	printf("\n");
 
	//输出方式4:从指针的角度找值
	printf("数据元素分别是:");
	for(int i=0; i<len; i++)
	{
		printf("%d\t", ptr[i]);
	}
	printf("\n");
 
	//输出方式5:从指针变量的角度
	printf("数据元素分别是:");
	for(int i=0; i<len; i++)
	{
		printf("%d\t", *(ptr++));
		
	}
	printf("\n");
 
	return 0;
}
 

2> 指针指向一维整型数组作为函数参数传递

当实参使用的是数组名进行传递时,本质上传递的是数组首元素的地址

被调函数的形参可以是一个数组接收,也可以是一个指针变量接收

3> 指针指向一维字符数组作为函数参数传递

1、由于字符串有结束标识,所以接收字符串时,可以不用接收字符串长度

2、一般对传入的字符串如果不进行更改操作的话,需要加上关键字const修饰

1.3.指针与字符串的关系

1.字符串的本质上是一个指针变量,可以定义一个指针指向一个字符串

2.当一个指针指向这一个字符串的时候,不呢通过该指针改变字符串中的内容

1.4const关键字

1.const 中文含义 常量,常属性

2.该关键字是一个变量的存储格式,修饰变量时,表示给该变量添加常属性

3.const修饰的变量,虽然有常属性,但是,还依然是一个变量

4.定义变量的格式 const 数据类型 变量名

5.修饰变量时,包括修饰普通变量和指针变量,有所不同

1.5const修饰指针变量(重要)

定义指针变量的格式: 数据类型 * 指针名;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值