### C语言语法总结 #### 结构体(Struct) 在C语言中,结构体是一种复合数据类型,用于将不同类型的数据组织在一起。例如: ```c struct Person { char name[20]; char gender; int age; float height; }; ``` 在上述代码中定义了一个`Person`结构体,它包含了姓名、性别、年龄和身高四个成员。可以这样创建一个结构体变量: ```c struct Person per = {"LiPing", 'M', 20, 175.5}; ``` 这里通过初始化列表为`per`变量分配了内存,并按照结构体成员的顺序赋值。 #### 联合体(Union) 联合体与结构体类似,但它们共享同一段内存空间。这意味着,在任何时刻,联合体中的所有成员都占用相同的内存区域。例如: ```c union Data { int i; char c; long l; float f; double d; }; ``` 这里定义了一个包含多种类型的联合体。需要注意的是,联合体中的所有成员共享相同的空间,因此存储的是最后一个赋值的成员值。例如: ```c union Data data; data.i = 10; printf("Value of i: %d\n", data.i); data.f = 123.45; printf("Value of f: %.2f\n", data.f); ``` 这里首先给`i`赋值10,然后输出;接着给`f`赋值123.45并输出。此时输出的`i`值可能不是10,因为`i`和`f`共享同一段内存空间。 #### 存储类别 C语言中有几种不同的存储类别,它们控制着变量的作用域和生存期: - **静态存储**:`static`关键字使得变量具有静态生存期,即使在函数调用结束之后仍然保留其值。 - **寄存器存储**:`register`关键字建议编译器将变量存储在寄存器中,以提高访问速度。 - **自动存储**:默认情况下,局部变量具有自动存储类别,它们随着函数调用的开始而创建,随着函数调用的结束而销毁。 - **外部存储**:`extern`关键字用来声明一个变量或函数是在其他文件中定义的。 #### 指针操作 指针是C语言中的一个重要概念,它存储的是另一个变量的地址。例如: ```c int a = 10; int *p = &a; // p now holds the address of a ``` 可以通过`*p`来获取`a`的值,或者通过`&a`获取`a`的地址。还可以对指针进行算术运算,例如`p++`将使指针指向下一个元素。 #### 函数指针 函数指针是指向函数的指针。例如: ```c int max(int x, int y) { return (x > y) ? x : y; } int (*p)(int, int) = max; // p is a function pointer int c = (*p)(5, 10); // calls the function max using the pointer ``` 这里定义了一个函数指针`p`,并将其设置为指向`max`函数。然后使用`p`来调用该函数。 #### 字符串处理 字符串在C语言中通常表示为字符数组,并以`\0`作为结束标志。例如: ```c char a[5] = "12345"; // a is a character array containing "12345" int len = strlen(a); // len will be 5 ``` 注意,字符串字面量会自动在末尾添加`\0`。`strlen()`函数返回的是不包括`\0`在内的字符个数。 #### 输入输出 C语言提供了多种输入输出方式,如: - `printf`:用于格式化输出。 - `scanf`:用于格式化输入。 - 文件操作:如`fopen`, `fread`, `fwrite`, `fclose`等。 例如: ```c char ch; FILE *fs = fopen("source.txt", "r"); // opens file for reading if (fs == NULL) { printf("Failed to open file.\n"); exit(1); } ch = fgetc(fs); // reads one character from the file fputs(ch, stdout); // writes one character to standard output putchar(ch); // also writes one character to standard output ``` #### 控制语句 C语言提供了丰富的控制语句,如条件语句(`if`, `else if`, `else`)和循环语句(`for`, `while`)等。 ```c int x = 50; if (x < 100) { printf("x is less than 100.\n"); } else if (x < 200) { printf("x is between 100 and 200.\n"); } else { printf("x is greater than or equal to 200.\n"); } int i = 0; while (i < 10) { printf("%d\n", i); i++; } ``` #### 错误和调试 在编程过程中经常会遇到各种错误,比如: - 逻辑错误:如使用`=`而不是`==`来进行比较。 - 语法错误:如缺少分号。 - 类型错误:如将整型变量赋值给浮点型指针。 对于这些错误,需要仔细检查代码,确保变量类型匹配、符号正确等。 #### 总结 本文对C语言的一些基础语法进行了总结,包括结构体、联合体、存储类别、指针操作、函数指针、字符串处理、输入输出以及控制语句等。掌握这些基本概念是学习C语言的关键。希望本文能够帮助初学者更好地理解和应用C语言。
union 表示共用体 算字节时只求最大的一个
struct 表示结构体
{ int 2个字节
char 1个字节 char name[20];表示20个字节
long 4个字节
float 4个字节(单精度)7位小数
double 4个字节(双精度)常用 14位小数 输出必须是%1.f
}per={“Li Ping”,{'M'},20,175.5};
static //表示静态存储器,就像坐火车只要不下火车座位始终是你的(有利于其他变量的引用)
register //变量直接存储在CPU中,速度快适合频繁调用的局部变量中
auto //默认的都是auto
extern //可以随时引用外部的变量,就像坐汽车,位子是不定的
*p代表的是数值(同时也指向数据地址并表达数据) p代表的是存放数值的地址
‘c’表示字符 “s”表示字符串
void 表示无返回值 return s; 表示有返回值s;
int max(x,y) //(*p)表示指向函数的指针变量
int(*p)();
p=max;
c=(*p)(a,b);
a[5]={"12345"} 错误,字符串长度最后面还要算上“\0” strlen(a[5])不包括‘\0’
p=a[0];
p,a[0],&a[0][0] 相同 p+1相当于 a[0]+1 等同于 a[0][1]
int a[2][3],(*p)[3];
p=a; 是指*(p+1)等于a[1],*(p+1)+1等于a[1]+1 ,所以*(*(p+1)+1)等于a[1][1]
char s[100]
scanf("%s", s) //不需要&符号 s表示的就是数组的地址
if(*a) //意思是a不为空,就是不到‘\0 ’
if(a) //意思是a不为0的任何数都行
(FILE *p)表示定位在*p的文件
if(fs=fopen(source,"r")!=NULL) //表示以写入的方式打开source文件
if(fr=fread(source,"r")!=NULL) //表示以读的方式打开source文件
while(!feof(fs)); //如果文件没有到文件尾则进入循环
%7.1f可以表示为 .1 表示的是保留小数点后面一位,前面的不知道什么意思
%5d表示的是_ _ _33, %-5d表示33_ _ _
float或double表示小数时 5/2=2.5 定义为 double s=0.0;
if(x<100)
else if(x<200) //表示100<x<200 双级套还可以用在for中用于排序
y++ 下一次遇到y才加1
++y 表示先加1再运算
swap(int *p,int *q) //*p=&a表示*p指向a的地址 仅限在定义时使用
剩余5页未读,继续阅读
- 粉丝: 13w+
- 资源: 133
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助