编程基础
2017-11-21 本文已影响21人
小芳姑娘2012
C语言
#define定义的宏和const定义的常量有什么区别?
- defined定义宏的指令,程序在预处理阶段将用#define所定义的内容只是进行了替换。因此程序运行时,常量表中并没有用#define所定义的宏,系统并不为它分配内存,而且在编译时不会检查数据类型,出错的概率要大一些。
const定义的常量,在程序运行时是存放在常量表中,系统会为它分配内存,而且在编译时会进行类型检查。
给出以下代码的输出(数组,指针)
int array[5] = {1, 2, 3, 4, 5};
int *p = &array[0];
int max = MAX(*p++, 1);
printf("%d %d", max, *p);
参考答案:1, 2
分析:p指针指向了数据array的首地址,也就是第一个元素对应的地址,其值为1,1 > 1
Max的值为1 ,*p++
,p指向的地址对应的是2.
这个关于数组与指针讲的很详细,可以参考学习。
http://www.jianshu.com/p/605858e5bcf3?utm_campaign=maleskine&utm_content=note&utm_medium=pc_all_hots&utm_source=recommendation
sprintf,strcpy,memcpy使用上有什么要注意的地方
- strcpy是一个字符串拷贝的函数,函数原型是 strcpy(chardst,const char src) 。将src开始的一段字符串拷贝到dst开始的内存中去,结束的标志符号为 ‘\0',由于拷贝的长度不是由我们自己控制的,所以这个字符串拷贝很容易出错。
- memcpy是一个内存拷贝函数,memcpy(char dst, const char src, unsigned int len)
- sprintf是格式化函数。将一段数据通过特定的格式,格式化到一个字符串缓冲区中去。spintf格式化的函数的长度不可控,有可能格式化后的字符串会超出缓冲区的大小,造成溢出。
static关键字的作用
- 隐藏。编译多个文件时,所有未加static前缀的全局变量和函数全部可见。
- 保持变量内容的持久。全局变量和static变量都存储在静态存储区,程序开始运行就初始化,只初始化一次。static控制了变量的作用范围。
- 默认初始化为0。