C语言常见陷阱总结
2018-06-17 23:59:36来源:未知 阅读 ()
1. 1 char array1[100]; 2 char* array2; 二者都可以当指针用,使用时有何区别?
1中字符数组,存储于栈区,sizeof(array1)为100,aray1代表首元素首地址,不可以被赋值,array1[0]这样可以被赋值,数组大小确定,难以扩容
2中存储于字符常量区,sizeof(array2)为4,array2可以被赋值,array2[0]不可以被赋值,空间大小可变
2. 32位中,long型和指针占4个字节,64位中占8个字节
3. strcat连续拼接字符串时,每次都要找到结尾,解决方案时给结尾做标记
4. const在C语言中为只读变量,C++中为常量
5. 一般机器默认小端存储,苹果机器为大端存储
6. char a[] = "Hello world";
sizeof(a) = 12 注:sizeof时算 \0 ,strlen时不算 \0
sizeof(*a) = 1 sizeof(&a) = 4
当字符数组以函数参数形式存在时,sizeof为4
7. printf函数执行时,计算顺序是从后向前,输出顺序是从前向后,可以将printf函数中想成传入的参数,存储于栈区
8.
int a[] ={2,8,16,24}; char* p1 = a; char* p2 = &a[3]; p2-p1 = ?
本题中,两个地址相减,求的是指针的偏移量,p1指向的内容是2,p2指向的内容是24,p2-p1为3个4字节大小,为12,又因为p1和p2的基本类型为1个字节,所以(3*4)/1=12
9. 括号表示表达式,表达式要变成int类型计算;有符号要向无符号类型转换;小类型要向大类型转换
10.
(a=1)?2:3
a=1,表示整个表达式的值为1,所以输出为2
11.switch case语句中,每个case过后如若没有遇到break,则顺次向下执行
12.char a[100] = {'a','b','c','\0','1','2'}; 遇到 '\0' 字符串结束
char a[100] = {'a','b','c','0','1','2'}; '0' 代表字符不是'\0'
char a[100] = {'a','b','c',0,'1','2'}; '\0'就是0,字符串结束
13.阿克曼函数 ack(1,k) = 2+x; ack(2,x) = 3+2*x; ack(3,x) = 2^(x+3)-3;
14.在移位运算时,数据需要补位时,符号位是什么就补什么
如
int i = 0xf0000000;i >>=1; i=0xf8000000
15.常量数值不能进行自加自减运算
16.注意与或运算,与运算时,前面表达式为假时,与运算符后面的表达式不参与运算,输出为假,若为真,则再计算与运算符后面的表达式
或运算时,或运算符前面的表达式为真时,不计算或运算符后面的表达式,直接输出为1,若为假,则在计算或运算符后面的表达式
17.sizeof返回值为unsigned int,当int遇到了unsigned int 时,转换为unsigned int进行计算
18.栈区空间的生命周期在遇到}时截止,在}之前返回栈区申请的空间不存在,因为被回收了,字符常量区的内容只能读不能向里面写
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:关于最小代价子母树
- 关于各种不同开发语言之间数据加密方法(DES,RSA等)的互通的 2020-06-07
- C语言程序结构 2020-05-31
- 每日干货丨C++语言主流开发工具推荐! 2020-04-28
- C语言实现经典游戏——扫雷! 2020-04-17
- C语言中的宏定义 2020-04-04
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash