C语言基础十一
程序员文章站
2022-07-03 23:00:04
...
指针数组是由多个同类型的指针变量构成的数组,声明方法如下 int *values[3]; 指针数组和二级指针可以互相替换 数组指针是一个指针变量,可以用来记录二维数组的名称,声明方法如下 int (*p_values)[3]; 数组指针可以和二维数组互相替换 数组指针加一时,一的单位是整个一维数组的大小 FILE结构体用来表示文件系统中的一个文件 fopen函数可以打开一个文件,如果失败则返回NULL,否则返回FILE结构体变量的地址。 打开模式结构如下 第一部分从如下三个字母中选择一个,必须存在 'r' : 对文件进行读操作,要求文件已经存在 'w' : 对文件进行写操作,如果文件还不存在则创建一个 新文件,如果文件存在则删除 'a' : 对文件进行写操作,如果文件已存在则把新内容追 加在文件结尾 第二部分由符号'+'表示,可以不存在。如果存在则表示对文件进行读写操作。 第三部分由符号'b'表示,可以不存在。如果存在则表示以二进制方式对文件进行操作。 fclose函数用于关闭一个文件,参数是一个FILE结构体变量地址 fputc函数可以把一个字符写入到文件中,如果失败则返回EOF。 fgetc函数可以从文件中读出下一个字符并返回,如果失败则返回EOF。 fread和fwrite函数可以以二进制方式对文件进行批量读写操作 rewind函数可以把文件的位置指针移动到文件开头 fseek函数可以把位置指针移动到文件中任何位置,三个基准点如下 SEEK_SET : 0 表示文件开头 SEEK_CUR : 1 表示位置指针当前位置 SEEK_END : 2 表示文件末尾 ftell函数可以用返回值报告当前位置指针相对于文件开头的距离 fgets可以从文件中读一个字符串。 fputs可以把一个字符串写入到文件中。 fprintf函数可以按照格式把数据写入到文件中 fscanf函数可以按照格式从文件中读数据到变量中 atoi函数可以把字符串中的整数读出 atof函数可以把字符串中的浮点数读出 sprintf函数可以把多个变量的内容拼凑成一个字符串 sscanf函数可以从字符串中读出多个数据并记录在多个变量中 /* 指针数组练习 */ #include <stdio.h> int main(int argc, char *argv[]) { int values[] = {6, 3, 7}, loop = 0; int *p_value = NULL; int *p_values[3] = {values, values + 1, values + 2}; /*p_value = p_values[0]; p_values[0] = p_values[1]; p_values[1] = p_value;*/ p_value = p_values[1]; p_values[1] = p_values[2]; p_values[2] = p_value; p_value = p_values[0]; p_values[0] = p_values[1]; p_values[1] = p_value; for (loop = 0; loop <= 2; loop++) { printf("%d ", *p_values[loop]); } printf("\n"); return 0; } /* 字符串排序练习 */ #include <stdio.h> #include <stdlib.h> #include <string.h> int compare(const void* p_value, const void* p_value1) { const char** p_str = (const char**)p_value; const char** p_str1 = (const char**)p_value1; return strcmp(*p_str, *p_str1); } int main() { char *str[] = {"China", "France", "England", "Russia", "America"}; int loop = 0; qsort(str, 5, sizeof(char*), compare); for (loop = 0; loop <= 4; loop++) { printf("%s\n", str[loop]); } return 0; } /* 数组指针练习 */ #include <stdio.h> int main() { int values[2][3] = {0}; //int **pp_values = values; int (*p_values)[3] = values; /*printf("%p\n", pp_values[0]); printf("%d\n", pp_values[0][0]);*/ printf("%d\n", values[0][0]); printf("%d\n", p_values[0][0]); values[1][1] = 3; printf("%d\n", p_values[1][1]); printf("%p, %p\n", p_values, p_values + 1); printf("%p, %p\n", values, values + 1); return 0; } /* 文件练习 */ #include <stdio.h> int main() { FILE *p_file = fopen("a.txt", "w"); if (p_file) { //文件操作语句 fclose(p_file); p_file = NULL; } return 0; } /* 文件练习 */ #include <stdio.h> int main() { FILE *p_file = fopen("a.txt", "w"); if (p_file) { //文件操作语句 char str[] = "Hello China!"; int pos = 0; while (str[pos] != 0) { if (EOF == fputc(str[pos], p_file)) { break; } pos++; } fclose(p_file); p_file = NULL; } return 0; } /* 文件练习 */ #include <stdio.h> int main() { FILE *p_file = fopen("a.txt", "r"); if (p_file) { //文件操作语句 char ch = 0; while (EOF != (ch = fgetc(p_file))) { printf("%c", ch); } printf("\n"); fclose(p_file); p_file = NULL; } return 0; } /* 文件练习 */ #include <stdio.h> int main() { FILE *p_file = fopen("a.txt", "r"); if (p_file) { //文件操作语句 char buf[20]; int size = 0; while (EOF != (buf[size] = fgetc(p_file))) { size++; } fclose(p_file); p_file = NULL; p_file = fopen("a.txt", "w"); if (p_file) { size--; while (size >= 0) { if (EOF == fputc(buf[size], p_file)) { break; } size--; } fputc('\n', p_file); fclose(p_file); p_file = NULL; } } return 0; } /* 文件练习 */ #include <stdio.h> int main() { int values[] = {1, 2, 3}; FILE *p_file = fopen("a.bin", "wb"); if (p_file) { //文件操作语句 int size = fwrite(values, sizeof(int), 3, p_file); printf("共写入%d个变量\n", size); fclose(p_file); p_file = NULL; } return 0; } /* 文件练习 */ #include <stdio.h> int main() { int values[3] = {0}, loop = 0; FILE *p_file = fopen("a.bin", "rb"); if (p_file) { //文件操作语句 int size = fread(values, sizeof(int), 3, p_file); printf("共读出%d个变量\n", size); for (loop = 0; loop <= 2; loop++) { printf("%d ", values[loop]); } printf("\n"); fclose(p_file); p_file = NULL; } return 0; } /* 文件练习 */ #include <stdio.h> int main() { FILE *p_file = fopen("a.txt", "r"); if (p_file) { //文件操作语句 char ch = 0; fseek(p_file, 3, SEEK_SET); ch = fgetc(p_file); printf("%c ", ch); //rewind(p_file); fseek(p_file, 3, SEEK_CUR); ch = fgetc(p_file); printf("%c ", ch); //rewind(p_file); fseek(p_file, -2, SEEK_END); ch = fgetc(p_file); printf("%c ", ch); printf("\n"); fclose(p_file); p_file = NULL; } return 0; } /* 变长参数函数练习 */ #include <stdio.h> #include <stdarg.h> int max (int cnt, ...) { int ret = 0, loop = 0; va_list v; va_start(v, cnt); for (loop = 0; loop < cnt; loop++) { int value = va_arg(v, int); if (value > ret) { ret = value; } } va_end(v); return ret; } int main() { printf("最大数字是%d\n", max(3, 6, 32, 17)); printf("最大数字是%d\n", max(4, 2, 9, 7, 3)); return 0; } static void trace(const char *format, ...){ FILE *fp = NULL; va_list args; fp = fopen("/var/tmp/whj.txt", "a+"); if (fp){ va_start(args, format); vfprintf(fp, format, args); fflush(fp); va_end(args); fclose(fp); } } */ #include <stdio.h> #include <stdlib.h> int main() { char str[20] = {0}; int value = atoi("328"); double d = atof("4.78"); printf("value是%d\n", value); printf("d是%lg\n", d); printf("%d %lg\n", value, d); sprintf(str, "%d %lg\n", value, d); printf("%s", str); value = 0; d = 0.0; sscanf(str, "%d %lg", &value, &d); printf("value是%d,d是%lg\n", value, d); return 0; }
上一篇: 桥接模式
下一篇: 设计模式 之 桥接模式