#include<stdio.h> //头文件,就是调用人家写好的一些函数(就是一些功能模块的集合)
int main() //主函数,表示一个程序的开始。一个程序中,有且仅有一个main函数
{
int a; //定义一个整形变量,这个整形变量里面存储的是整数。
a = 10; // 给一个整形变量赋值。
float b; //定义一个单精度浮点型变量b
b = 19.00005; //给变量b赋值
double c; //定义一个双精度浮点型变量c,用%lf输出
c = 22;
char d; //定义一个字符型变量d,用%c输出
d = 'a'; //''赋值
printf("a = %d b = %f c = %lf d = %c\n", a ,b, c, d); //a = 10 b = 19.000050 c = 22.0000000 //d = a
printf("int所占的字符数 %d\n", sizeof(int)); //显示int型所占的字符数
return 0; //表示正常退出
}
1.如何定义一个变量
变量名:它是只能由数字/字母/下划线组成的。开头只能是字母或者下划线;
比如: 2sdglkghlk;这种就是不合法的变量名;正常的变量名表示方式,StudntAge ,student_age,
student, student_ID ,student01 ,student_dent1;
例子:
1)大小写转换
int main()
{
char c1, c2;
c1 = 'A';
c2 = 'A'+32;
printf("%c, %c \n",c1, c2); //大小写转换
}
2)
int main()
{
int a = 200, b = 010; //以0开头的数是八进制数,如b
printf("a= %d b= %d\n", a, b); //a= 200 b= 8
return 0;
}
编译的四个步骤:
1. 预处理 简单的替换,将一些宏定义库函数替换到代码中去
gcc -E hello.c -o hello.if
2. 编译 将预处理之后的代码进行词义分析,语法检查。(报错地方出现在这个阶段)并且生成汇编代码
gcc -S hello.i -o hello.sbrk
3. 汇编 将汇编代码转换成二进制代码
gcc -c hello.s -o hell.o
4. 链接 将生成的二进制文件链接成计算机可执行的文件。
gcc hello.o -o hello
存储布局:
一般来说,我们编写一段代码,每一个变量都有自己所在的存储位置。
都有哪些位置?
栈 一般存储局部变量 (它的空间比较小,它是由系统自动分配内存和释放内存的)
int a; 系统分配了四个字节的空间给了a;一般的局部变量都存储在栈中。
定义在一个函数(就是一个功能模块)中的局部变量,在函数结束时就不能再次使用了。因为它已经被系统回收了。
定义的全局变量存放在全局数据段,(总之就是不在栈中),它的作用范围是整个程序。
堆 程序员手动分配的内存的变量,一般这些变量很好区别,调用mall/calloc之类的手动分配内存的函数
未初始化数据段 又称未初始化全局变量区
初始化数据段 已经初始化的全局变量
代码段(正文段) 其他一些条件语句/代码存放在代码段
int a = 0; //全局初始化区。data段
static int b = 20; //全局初始化区。 data 段
static 静态的意思,作用:变量b, 它被限定在本文件中,不能被其他文件使用。一般来说,它存储在初始化数据段。
char *p1; //全局未初始化区。 bss段
const int A = 10; // .rodata 段
// const 只读的意思,意思是A的值不能变,或者说A是一个常量
char *p = "wamgliang" //这里是定义一个字符串常量,字符串常量不能改变
p1 = (char*) malloc(10) //分配得来的10个字节的区域就在堆区
strcpy(p1,"12444"); // 123444在常量区,编译器可能会将它与p3所指向的“123444”优化成了一个地方
char ch; //从标准输入中获得一个字符给ch;等效于scanf("%c", ch);
ch = getchar();
putchar(ch); //putchar(ch),输出单个字符到标准输出中
printf("\n");
return 0;
}
int main(void)
{
char ch;
ch = 'A';
putchar(ch); //putchar(),输出单个字符,括号中能填写变量名/转义字符/16进制数/8进制数/10进制数/
putchar('\n'); //需要注意的是:你的字符。或者转义字符必须是单个/必须是用单引号括起来,你的数字(不管是什么进制的数)都不要加单引号。
putchar(0x63);
putchar('\n');
putchar(0143)
putchar('\n');
putchar(99);
putchar('\n');
return 0;
}
int main()
{
char name[20]; //这个东西叫做字符数组,它拥有20个字节的空间;name表示这20个空间的首地址。
scanf("%s", name);
printf("%s\n", name);
//gets(name); 有警告
//puts(name);
return 0;
}
从键盘输入大写字母,输出对应的小写字母
int main()
{
char ch,ch1;
printf("please input char");
scanf ("%c",&ch);
ch1 = ch +32;
printf("ch1= %c\n", ch1);
return 0;
}
int main()
{
int Age, gz;
printf("please input Age gz\n");
scanf(" %d,%d", &Age, &gz);
printf("Age = %d,\n gz = %d \n", Age, gz);
char sex;
int age;
float salary;
printf("please input your sex:");
scanf("%c", &sex);
printf("please input your age:");
scanf ("%d", &age);
printf("pleas input your salary");
scanf("%f", &salary);
printf("your sex : %c\n", sex);
printf("your age : %d\n", age);
printf("your salary: %f\n", salary);
return 0;
}