您的位置:首页 > 其它

C备忘笔记

2015-07-14 09:28 309 查看
main(){ ... }
函数是一个特殊的函数,并不需要参数。

格式符:

%d
按照十进制整型数打印

%ld
长整型

%6d
按照十进制整型数打印,至少6个字符宽

%f
浮点数打印

%.2f
浮点数,小数点后有两位

%3.2f
浮点数,小数点后有两位,占3个字符宽

%o
8进制

%x
16进制

%%
表示%号本身

符号常量:

符号常量大写,语句结尾无需分号。

#define    NUMBER      10


限定符const

const cant_modified = 'always';
其值将不能被修改。

字符输入输出
getchar putchar

EOF(end of file),定义在
stdio.h
中,是个constant,一个整型数。

在没有输入时,getchar将返回一个特殊值,被称为EOF。

#include <stdio.h>

main(){
int c;
c = getchar();
while (c != EOF){
putchar(c);
c = getchar();
}
}

/* simplify edition */
main(){
int c;
while ((c = getchar()) != EOF){
putchar(c);
}
}


类型转换

赋值时也需要进行类型转换,赋值运算符右边的值需要转换为左边变量的类型,左边变量的类型即赋值表达式结果的类型。

把较长的整数转换为较短的整数或char类型时,超出的高位部分将被丢弃。

int i;
char c;

i = c;
c = i;


执行后,c的值将保持不变。但是如果反过来,把高位的转换为低位,则有可能丢弃超出的高位部分。

所以当
float f;
转换为
int i;
,即
i = f;
,小数部分将被舍弃,是进行四舍五入还是舍弃取决于具体的实现。

强制类型转换

在任何表达式中都可使用强制类型转换:(类型名) 表达式

Note:强制类型转换只是生成一个指定的n的值,n本身的值并没有变。强制类型运算符和其他一元运算符优先级相同。

#include <math.h>
sqrt((double) n)

/* 2将被自动转换为2.0 */
duble sqrt2(double);
root = sqrt2(2);


单双引号

C中单双引号是有区别的,单引号中表示字符,而双引号表示字符串。

因此
'a'
表示字符, 在ASCII码中对应数字为97 。

printf("%d\n", 'a');    /* 将会打印97 */


自增自减,前缀后缀的区别

如果单单是用在变量上,两者最后结果是一样的:如
n++
++n
结果是一样的。 但是前缀和后缀在C中还是有区别的:

++n
表示先将n的值递增1;

n++
表示先使用变量n的值,再将n值递增1。

所以,如果n的值为10:

x = n++;
x的值还是10,n为11

x = ++n;
x的值为11,n为11

表达式
(a+b)++
是非法的。

#include <stdio.h>

main(){
char a[] = "wha";
int n = 2;
a[n++] = 't';
a[n++] = '\0'
printf("%s\n", a);
}


结果为: wht

'\0'
为字符串结束符号)

n=2, a[n++] = 't'
后缀自增此时最先作用的其实是
a
= 't'
, 之后n才会做自增。

函数

placeholder() {}
像这样什么不执行任何操作,不返回任何值的空函数一般用来做预留。

如果函数定义中省略了返回值类型,则默认认为 int 类型。

三元操作符

int a, b, samll;
a = 10;
b = 20;
small = (a < b) ? a: b;
/* like python: small = b if a > b else a */
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: