声明和初始化(Declarations and Initializations)

返回

如何使用integer type? 如果数值大于32,767或小于-32,767,使用long. 如果容量重要的话(比如说巨大的数组,许多构造体),使用short. 其他的情况使用int.

整数常数的数据判断

#include <stdio.h> int main(void) { int plus3 = 3, minus3 = -3; double ddt; // 2147483647是可表示的最大整数 ddt = 2147483647 + plus3; printf("Ex1 ddt= %f\n",ddt); ddt = 2147483647U + plus3; printf("Ex2 ddt= %f\n",ddt); ddt = minus3 + 1; printf("Ex3 ddt= %f\n",ddt); ddt = minus3 + 1U; printf("Ex4 ddt= %f\n",ddt); ddt = minus3 + 0; printf("Ex5 ddt= %f\n",ddt); ddt = minus3 + 0U; printf("Ex6 ddt= %f\n",ddt); return 0; } /* 运行结果 Ex1 ddt= -2147483646.000000 Ex2 ddt= 2147483650.000000 Ex3 ddt= -2.000000 Ex4 ddt= 4294967294.000000 Ex5 ddt= -3.000000 Ex6 ddt= 4294967293.000000 */

extern 声明外部变量

#include <stdio.h> void func(void); int glb = 88888888; int main(void) { printf("main:glb=%d\n",glb); func(); return 0; } // test080905_2.c #include <stdio.h> extern int glb; void func(void) { printf("func:glb=%d\n",glb); } /* C:\ctest\cl test080905.c test080905_2.c Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved. test080905.c test080905_2.c コードを生成中... Microsoft (R) Incremental Linker Version 6.00.8168 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. /out:test080905.exe test080905.obj test080905_2.obj C:\ctest>test080905 main:glb=88888888 func:glb=88888888 */

声明外部变量2

#include <stdio.h> void sub(void); extern int glb1; int main(void) { printf("%d\n",glb1); /* 不能使用glb2变量==> printf("%d\n",glb2); test080908.c test080908.c(10) : error C2065: 'glb2' : 定義されていない識別子です。 test080908.c(20) : warning C4098: 'sub' : 戻り値の型が 'void' で宣言された関数が 、値を返しました。 */ sub(); return 0; } void sub(void) { extern int glb2; // 函数内宣言 printf("%d\n",glb1); printf("%d\n",glb2); return 0; } /* 运行结果 44444444 44444444 88888888 */

获取一定范围的任意整数

#include <stdio.h> #include <stdlib.h> int main() { int N; int rand1; N = 1000; rand1 = (int)((double)rand()/((double)RAND_MAX+1)*N); printf("RAND_MAX is %d\n", RAND_MAX); printf("N is %d\n", N); printf("N rand is %d", rand1); return 0; } /* 答案有问题? RAND_MAX is 32767 N is 1000 N rand is 1 */

返回int型和double型的函数

#include <stdio.h> int rint(); double rdb(); int main(void) { int a; double d; a = rint(8888); printf("%d\n", a); d = rdb(88.88); printf("%f\n", d); return 0; } int rint(int dt) { return dt * 10; } double rdb(double dt) { return dt * 10.0; } /* 运行结果 88880 888.800000 */

文字型数据

#include <stdio.h> int main() { char c1; unsigned char c2; int it; c1 = '\xFF'; c2 = '\xFF'; it = '\xFF'; printf("c1=%d\n", c1); printf("c2=%d\n", c2); printf("it=%d\n", it); c1 = 0xFF; c2 = 0xFF; it = 0xFF; printf("c1=%d\n", c1); printf("c2=%d\n", c2); printf("it=%d\n", it); return 0; } /* 运行结果 c1=-1 c2=255 it=-1 c1=-1 c2=255 it=255 */
返回