1、const 修饰变量,这个变量就被成为常变量,不能被修改 ,但本质上还是变量
使用const 可以增加代码的鲁棒性、健壮性。
2、assert可用于快速判断错误。
下面以strlen()的模拟实现为例:
const 修饰指针变量,如果放在*左边,表示指针指向的内容,不能通过指针来改变;如果放在*右边,指针变量不可改变,但是指针指向的内用可以改变。
#include<stdio.h>
#include<assert.h>
size_t my_strlen(const char *str)//不期望arr的内容被改变,加const
{
//assert(str != NULL);
assert(str);
size_t count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char arr[] = "abc";
int len = my_strlen(arr);
printf("%d\n", len);
return 0;
}
以上代码中的assert(str),如果str为空值,则会快速做出判断,提示此处出现错误;
size_t是一种无符号的整型数,它的取值没有负数,在数组中也用不到负数,而它的取值范围是整型数的双倍。 sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。 该类型保证能容纳实现所建立的最大对象的字节大小;
#include<stdio.h>
#include<assert.h> //快速判断错误
char* my_strcpy(char * dest,const char * src)
{
assert(dest != NULL);//断言
assert(src != NULL);//断言
char *ret =dest;
while (*dest++ = *src++)
{
;//hello的拷贝
}
return ret;//返回目标空间的起始地址
}
int main()
{
char arr1[20] = "**************";
char arr2[10] = "hello";
my_strcpy(arr1, arr2);//1、目标空间的起始地址,2、源空间的起始地址
printf("%s\n", arr1);//
return 0;
}