C语言与指针学习笔记

来源:互联网 发布:怎么安装mac os x 编辑:程序博客网 时间:2024/05/27 14:13

1、while(scanf("%d",&a)==1),当输入数字时,循环执行,输入字符退出循环;
因为scanf函数赋值成功时时会返回1,复制失败返回0;
如:scanf("%d",&a),输入‘a’时会赋值错误,返回值为0;
scanf("%d,%d",&a,&b),输入1,1时,复制成功,则返回值为2。

2、函数调用,当传递参数为标量时,参数是按值(value)传递的,即调用的函数无法对传递的标量值进行修改;
而传递参数为数组时,参数则是以引用(reference)的形式进行传递,即按址传递的,所以调用的函数可以对传递的数组值进行实际的修改,但可以在参数定义时加入const语句,可以防止参数被调用函数修改;
如:int const arr[10],这样参数就不会被调用函数修改了。

3、gets、puts与getchar、putchar;
getchar函数是从当用户输入回车时,从键盘缓冲区中读取一个函数并返回,并不能直接复制给一个变量;
如getchar(i),编译时系统会报错:提供给函数getchar的实参太多,该程序应该写为i=getchar();
但putchar却可以直接输出字符变量的值,如putchar(i);会直接打印出i的值;
gets函数可以从标准输入设备中读取字符串直到换行符,并将字符串赋值给字符串变量,如gets(str);
同样的,puts函数可以将字符串变量打印,并自动换行。

4、数组名代表的是数组首元素的地址,即str与&str[0]同义,那么str也与str[0]同义,因为加地址就是代表该地址上的值;
另外,二维数组也可以这样理解,如定义一个二位数组str[][],那么str[1]代表的就是str[1][]这个数组的首元素地址,即与&str[1][0]同义,同样的,*str[1]的值也与str[1][0]相同。

5、c语言中被保留的关键字,不能作标识符使用:
auto goto do signed unsigned break double if break sizeof void case else int static
volatile char enum long struct while const extern register switch continue float return typedef
default for short union。

注意:C语言中区分大小写,即如 Int 不是被系统保留的关键字,可以作标识符使用,但会出现一些意料之外的错误,所以不是必须情况的话,尽量避免。

6、c语言中不可以嵌套注释,如:
/*comment /* comment */ example */
第一个*/将注释闭合,导致系统认为后半句不是注释,从而报错。

7、c语言中反斜杠加数字表示的值为三位八进制数,如:
\40的值为32,\100的值为64,如果反斜杠后面的数字超过三位或者不符合八进制,系统会发出警告;
反斜杠加x加数字表示为两位十六进制数,如:
\x40的值为64,同样的,如果x后的数字超过两位或者不符合十六进制,系统会发出警告。

8、宏定义可以定义函数,如,简单的比较大小宏函数:

#define MAX(a,b) (a>b?a:b)

可以实现与函数

int MAX(int a,int b){    if(a>b)        return a;    else        return b;}

一样的功能,但却更加节省系统资源,省去了一系列的资源区的调用以及压栈堆栈操作;
同样,宏也可以进行一些简单的计算,如:

#define second (366*24*3600)

可以利用宏计算闰年的秒数。

原创粉丝点击