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;
}
{
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;
}
{
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;
}
加油,申火火。
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的用法
{
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.字符串的长度与有效数字
{
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;
}
加油,申火火。
阅读全文
0 0
- const 与assert的学习
- ASSERT()和assert() | const,static和volatile要注意的几个问题 |define宏与const区别
- ASSERT()和assert() | const,static和volatile要注意的几个问题 |define宏与const区别
- assert、const
- assert 的学习
- C语言关键字:static,const,inline,volatile与assert()等
- C++ const与指针的学习
- assert and const
- 认识const 和assert
- assert宏的深入学习
- ASSERT与VERIFY的区别
- ASSERT与VERIFY的区别
- BOOST_STATIC_ASSERT与assert的区别
- assert与if的区别
- BOOST_STATIC_ASSERT与assert的区别
- BOOST_STATIC_ASSERT与assert的区别
- 模拟实现库函数strcpy之assert和const的用法
- const * 与 *const的区别
- 嵌入式高级编程
- pat打印沙漏
- 互联网并发编程之一 线程安全01
- Hibernate的学习之路二十一(一对多的级联保存)
- HTML动态增加和删除表格的行和列
- const 与assert的学习
- 有人问我:程序员要供祖师爷的话该供谁?
- 放弃Python转向Go语言:我们找到了以下9大理由
- 如何将项目上传到Github
- 史上最全的Vim命令
- 题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。(java)
- 微信云控系统的实现原理,微信云控系统源码之服务器推送的实现及其核心代码
- 【bzoj4571: [Scoi2016]美味】区间异或和最大 ,可持久化线段树(主席树)
- SGL图形库简介