const 与assert的学习

来源:互联网 发布:知乎首批41家军工名单 编辑:程序博客网 时间:2024/05/17 04:09
昨天上午主要学习了3个知识点。分别是const的用法、assert的用法、字符串的长度与有效数字。
1.const的用法。
Const的作用有4点:
(1)定义常变量(不能写,只读);
(2)类型对于const透明,例 const int 等同于int const;
(3)Const直接修饰的东西不能做左值;
(4)权限可以同等或缩小传递。(传递是以地址传的)

程序举例具体如下:
int main()
{
① //只定义ca可读
int a = 10; //读,写
int b = 20; //读,写
const int ca = 100; //ca被定义为只读
int *p = &a;
p = &b; //因为变量a和b都是既可读又可写,所以可以把地址放在变量p中。
//p = &ca;//error,因为ca可读不可写,所以ca的地址不能放在p中,如果放进去,对p解引用,也就是修改a的值,这是不允许的。
//*p = 30;

② //const直接修饰*cp1,所以*cp1不能做左值
const int *cp1 = &a; //等同于int const *cp1 = &a;
cp1 = &b;
cp1 = &ca;//ok
//*cp1 = 100;//error,见const作用第3条,const直接修饰的内容不能做左值。

③ //const直接修饰cp2,所以cp2不能做左值

int *const cp2 = &a;
//cp2 = &b;//error
//cp2 = &ca;//error
const int *cp3 = &ca;//ok 这个时候可以把ca的地址存在cp中,是因为对*cp3前面加了const,所以不会出现*cp3=100.如出现,崩溃。
//int *const cp4 = &ca;//error

return 0;
}

2.assert的用法


int Div(int a,int b)
{
assert(b != 0);//为真,什么都不做;为假则崩溃,并且会告知你崩溃的原因
return a/b;
}

int main()
{
char str1[100] = "hello world";
char str2[100];
//Mystrcpy(str2,str1);
Mystrcpy(NULL,str1);
//printf("%s,%s\n",str1,str2);

printf("%d\n",Div(5,0)); //
return 0;
}

3.字符串的长度与有效数字


int main()
{
char str1[100] = "abcdef";
char *str2 = "abcdef";
char str3[] = "abcdef";
char str4[100] = "abcde\0fgh";
char str5[] = "abcde\0fgh";
char *str6 = "abcde\0fgh";
printf("%d,%d\n",sizeof(str1),strlen(str1));//100,6
printf("%d,%d\n",sizeof(str2),strlen(str2));//4,6 因为str2是一个指针变量,所以长度是4个字节。
printf("%d,%d\n",sizeof(str3),strlen(str3));//7,6 字符串结尾是’\0’,所以长度为7
printf("%d,%d\n",sizeof(str4),strlen(str4));//100,5 遇见’\0’就截止,有效数字为5
printf("%d,%d\n",sizeof(str5),strlen(str5));//10,5
printf("%d,%d\n",sizeof(str6),strlen(str6));//4,5
//printf("%d\n",Mystrlen("*&^%43@!]["));

return 0;
}

加油,申火火。
原创粉丝点击