常变量与符号常量的区别
先来看一段代码:
要求:算出半径为10的圆的面积。
#include <stdio.h>
#define PI 3.14 //定义符号常量
int main (void)
{
const double r=10; //定义常变量
double s;
s=PI*r*r;
printf("s=%lf",s);
return 0;
}
可以看出:二者出现的位置不同,常变量出现在函数体内,符号常量在函数体外。
获取值的方式不同。
还有两处不同:内存分配,define是宏定义,程序在预处理阶段将符号常量用define定义的内容进行了替换(在此之后,PI代表3.14)系统不为它分配内存。const定义的常变量,在程序运行时,系统需要为它分配内存空间。
编译时类型检查,define定义的符号常量,预处理时,直接进行替换。编译时不能进行数据类型检查。const定义的常变量,编译时进行严格的类型检验。
字符串常量
定义:用双引号(" ")括起来的0个或者多个字符组成的序列。
字符串常量是不可被修改的 。
存储:字符串常量以ASCII码的形式存储在内存中,每个字符串尾自动加一个'\0' 作为字符串结束的标志。'\0'在ASCII码表中也是一个字符,其 ASCII码值为0。
例子: "hello world" 存储在内存中时hello与world间的空格也要被存储起来,结尾加'\0'。空格与'\0'各占一个Byte。
字符串"a"与字符'a'不同,前者占2个Byte,后者占一个。
特别的,"123abc\n" '\n'在反义字符中,其只占一个Byte。
字符串函数
字符串函数也叫字符串处理函数,指的是编程语言中用来进行字符串处理的函数,如C,pascal以及LotusScript中进行字符串拷贝,计算长度,字符查找等的函数。
C中有大量操作字符串的函数,使用时,需要包含头文件<string.h>。
下面介绍两种字符串函数:strlen,strcmp。
strlen(s1) | 返回字符串s1的长度(不含'0') |
strcmp(s1,s2) | 若s1=s2,返回0;若s1>s2,返回一个大于0的数;若s1<s2,返回一个小于0的数 |
(strcmp形式)字符串的比较规则 :对两个字符串自左向右逐个字符相比(比较ASCII码值),直到出现不同的字符或'\0'为止。如果字符全部相同,则认为相等;若出现不相同的字符,以第一个不相同的字符比较结果为准。
规律:若两个字符串都由字母组成,则按字母顺序(a~z)在后面的为“大”,小写字母比大写字母“大”
例子:
#include <stdio.h>
#include <string.h>
int main (void)
{
printf("strlen=%d\n",strlen("hello world"));
printf("strcmp=%d\n",strcmp("my","hello world"));
printf("strcmp=%d\n",strcmp("my","my"));
printf("strlen=%d\n",strlen("123abc\n"));
return 0;
}