C语言基础篇四

本文介绍了C语言中的一些基础知识,包括自定义求数组长度的函数、实现strcpy函数、删除字符数组中的偶数字符、探讨大小端问题以及深入理解指针操作,如数组指针加减、内存对齐等。同时讨论了在调用拷贝函数时需要注意的事项。
摘要由CSDN通过智能技术生成

一、自定义求数组长度的函数。

int My_strlen(char *src)
{
	int len = 0;
	while(*src++ != '\0')
	{
		len++;
	}
	return len;
}

二、自定义strcpy函数。

(1)
void My_strcpy(char *dest,const char *src)//j加const预防原字符串被修改
{
    assert(dest != NULL && src != NULL);//断言
    	int i = 0;
	for(i = 0;src[i] != '\0';i++) 
	{
		dest[i] = src[i]; //*(src+i)
	}
	dest[i] = '\0'; //手动赋值'\0'
}
(2)
void My_strcpy2(char *dest,const char *src)
{
	assert(dest != NULL && src != NULL);
	while(*src != '\0')
	{
		*dest = *src;
		dest++;//dest+1
		src++;//src+1
	}
	*dest = '\0';
}
(3)
void My_strcpy3(char *dest,const char *src)
{
	assert(dest != NULL && src != NULL);
	while(*dest++ = *src++)//最后while表达式的值为0,循环进不去,但是已经进行了赋值
	 {
	 }
	 }

(4)
char * My_strcpy4(char *dest,const char *src)
{
	char *p = dest;//将dest保护起来
	assert(dest != NULL && src != NULL);
	while(*dest++ = *src++) {}
	return p;//返回值为指针
}
int main()
{
    char *str2 = "hello"; 
   char str3[6] = {}; 
  char *p = My_strcpy4(str3,str2);//字符串拷贝函数
 printf("%s\n",p);
	return 0;
}

三、删除字符数组中的偶数

int Fun(int *arr,int len)
{
	int j = 0;//放奇数的下标
	for(int i = 0;i < len;i++) 
	{
		if(arr[i] % 2 != 0) //奇数
		{
			arr[j] = arr[i];
			j++;
		}
	}
	return j;
}

四、大小端判断

bool IsBig()
{
	int a = 0x12345678;
	char *p = (char *)&a;//p指针只能访问一个字节
	if(*p == 0x78) 
	{
		return false;//小端
	}
	else
	{
		return true;//大端
	}
}

五、
char *str=“hello”;
char *str2=“hello”;
printf("%d,%d",str,str2);//两个值相等,相当于两个指针同时指向rodata段的同一个字符串。
六、
int a[10]={1,2,3};
a+sizeof(int)//相当于&a[4]
&a[0]+1//等价于&a[1]
(int *)&a+1//加1相当于加4个字节,则加到了a[1]的地址
(int *)((char *)a+sizeof(int))// sizeof(int)的值为4,char *a+sizeof(int)加了4个字节,再强转为(int *)类型,指向a[1]的地址。
七、调用拷贝函数应注意的

#include<stdio.h>
#include<string.h>
int main()
{
	char *str="tulun";
	char *str2="hello";
	char str3[5]={};
	printf("%s",strcpy(str3,str2));//错误(先打印,后报错),"hello"字符串长度为6,str3数组的长度为5,越界
	return 0;
}

八、大小端

  • 大端:低地址放高数据
  • 小端:低地址放低数据
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值