C语言中最容易出错的知识点
来源:互联网 发布:江苏省服务贸易数据 编辑:程序博客网 时间:2024/05/09 11:11
1、
#ifdef 标识符 //定义了宏就执行语句一
语句一
#else
语句二
#endif
2、
#ifndef 标识符 //没有定义宏就执行语句一
语句一
#else
语句二
#endif
3、
#if 表达式 //表达式成立就执行语句一
语句一
#else
语句二
#endif
一般出考点的地方就在宏定义上,例如
#define b (2 + 1)
#define dvx(x, y) (x * y)
试写出以下宏dvx(a,b)的结果?
正确的结果应该是 :7 + 3 * ( 2+1 ) = 16
很多人都会得出 30 的结果,原因就是不了解宏只是简单的替换,不会做什么运算。
二、strlen() 与 sizeof()
两者要诉述原理估计要长篇大论了,其实我们只要记住一下几个例子就能从中了解他们的原理了:
char str[100] = "zhanglei";
char *p = str;
int n = 100;
sizeof(str) = 100; sizeof(p) = 4; sizeof(n) = 4
strlen(str) = 8;
sizeof()是计算数组的空间大小,strlen是计算数组中元素的个数,且遇到'\0'结束;对于指针,指向的是内存的地址,自身只占据指针类型占据的空间大小,因其是动态存储,分布在堆栈区,在32位机上,和整形大小是一样的,都是4;一下这个函数参数与指针等价:
void function(char str[])
{....}
sizeof(str) = 4;
还有一种更加迷惑的形式:void *p = malloc(100);
看似好像申请了100个空间,但是sizeof(p) = 4;p 指定的还是地址。
三、变量
在内存中系统提供有三种存储空间:
1、静态存储区
2、动态存储区
3、程序区
其中静态存储区主要存储全局变量,在整个程序运行期间都会存在,动态存储区主要放置一些局部变量,在内存中分布在堆栈区,当函数结束的时候会自动释放,其中有一个关键的词:static,当全局变量定义为static类型后,extern就不能在调用它;局部变量被定义成static后,变量值在整个函数运行期间只被初始化赋值一次,且被static修饰的变量和函数只能作用与此函数或此文件中;以下分别为三个.c 文件,分析程序运行的结果:
a.c;
extern int va;
int main(void)
{
printf(” %d”, va* getO()*getG(););
}
b.c:
static int va = 18;
static int getG(void)
{
return va;
}
int getO(void)
{
return getG();
}
c.c:
int va = 7;
int getG(void)
{
int va = 20;
return va;
}
字符串指针,字符串存放在文字常量区,把字符串的首地址放在指针变量中,只能读,不能写。
上一篇:驱动学习总结
下一篇:麻烦牛人帮忙解释一下
- 记录一下ETIM_CLientUI程序在...
- 怎么老是出错呀!大家帮我看看...
- 【JAVA】设计模式之外观模式...
- 好梦伴你让你15分钟轻松入睡,...
- 运动前后注意 孩子少感冒...
- test123
- 编写安全代码——小心有符号数...
- 使用openssl api进行加密解密...
- 一段自己打印自己的c程序...
- sql relay的c++接口
- 我的ChinaUnix博客被锁定了,...
- 虚拟机中ubuntu无线连接问题...
- IBM DS3400 盘阵怎么查看是单...
- 启动auditd时,报错如下,怎么...
- CGSL系统中root密码正确,但无...
- C语言中最容易出错的知识点
- C语言中容易出错的几个地方
- C语言中容易出错的优先级运算
- C语言容易出错的地方
- 【学习ios之路:C语言】C语言中容易出错的试题整理.
- c 中容易出错的 细节
- C/C++中容易出错的地方
- C中容易忽略的知识点
- 嵌入式C编程中最容易出错的几个关键点
- C语言中容易导致指针和内存泄露的几种出错
- [c语言基础回顾]操作符和表达式中一些极其容易混淆的知识点
- Jquery中最容易出错的赋值问题
- C语言一些容易出错的优先级问题
- C、C++语言容易出错的几个地方
- PHP中最容易忘记的一些知识点总结
- C语言中的几个容易混淆的知识点总结
- C语言中的几个容易混淆的知识点总结
- C语言中的一些容易出现错误的知识点
- windows7下nodeJS无法编译解决方案
- ZOJ 2656 Travel Around Country(模拟,枚举)
- shell学习:Linux系统日志的相关命令、文件和管理工具
- 用 R 画中国分省市地图
- 驱动学习总结
- C语言中最容易出错的知识点
- 麻烦牛人帮忙解释一下
- 知识点
- 简单的广播收发
- UDP类型的 client/server 实例
- 浅谈阅读LINUX内核源码
- TFTP协议实现
- socket网络编程函数
- ZOJ 3569 Dr. Zomboss's Revenge(贪心)