标准C知识10
来源:互联网 发布:向多个gsm模块发数据 编辑:程序博客网 时间:2024/06/10 08:26
char * value[10];
数组指针是一种特殊的指针,专门用来和数组配合使用的。他们可以用来记录二维数组的名称或一维数组名称的地址。数组指针的声明语法如下
int (*p)[10];
其中p是数组指针的变量名
数组指针加一相当于二维数组名称加一,单位是一个一维数组的大小,数组指针前面加*以后再加一则单位是一个变量的大小。
文件指针是一个指针变量,它和某一个文件对应,对这个文件进行的所有操作都需要通过这个文件指针实现。
fopen函数用于打开文件,fclose函数用于关闭文件。参考04file.c练习
fclose如果失败会返回EOF(-1)。
打开文件时的模式说明分成三个部分
第一部分是必选的,从三个字符中选择一个
"r"表示打开文件进行读操作,文件应该已经存在
“w”表示打开文件进行写操作。(如果文件已经存在则会整个删除这个文件。)
"a"表示打开文件进行写操作。(如果文件已经存在则会把内容追加在原文件末尾)
第二部分是可选的,用字符“+”表示。这个部分表示对文件进行都写两种操作。
第三部分是可选的,用字符"b"表示。这部分表示对文件以二进制方式进行操作。
fputc函数可以把一个字符写入到文件中,失败返回EOF。
fgetc函数可以从文件中读出一个字符,失败返回EOF
fwrite函数可以把一个数组中的多个数据以二进制方式写入到文件中,参考08fwrite.c练习
fread函数参考09fread.c练习
FILE结构体中记录了文件的位置指针,它表示下次文件操作将从文件的什么位置进行。每次完成文件操作后位置指针都会改变。
rewind函数参考10rewind.c练习
ftell函数可以获取位置指针的位置
fseek函数可以把位置指针移动到文件中的任意位置。
文件中的三个基准点
SEEK_SET 0 文件开头
SEEK_CUR 1 位置指针当前位置
SEEK_END 2 文件末尾
fgets可以从文件中以字符串方式读内容
fputs可以向文件中以字符串方式写内容
fscanf函数可以格式化的从文件中读取内容
fprintf函数可以格式化的向文件中写入内容
/*
指针数组练习
*/
#include <stdio.h>
int main() {
char str[100] = {0}, num = 0, loop = 0;
char *value[10] = {NULL};
char *p_str = str;
printf("请输入一个字符串:");
fgets(str, 100, stdin);
for (loop = 0; loop <= 99; loop++) {
if (0 == str[loop]) {
value[num] = p_str;
num++;
break;
}
else if ('\n' == str[loop]) {
str[loop] = 0;
value[num] = p_str;
num++;
break;
}
else if (' ' == str[loop]){
str[loop] = 0;
value[num] = p_str;
num++;
p_str = str + loop + 1;
}
}
for (loop = 0; loop <= (num - 1); loop++) {
printf("%s\n", value[loop]);
}
return 0;
}
/*
指针数组排序练习
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(const void* p, const void* p1) {
char **pp = (char**)p;
char **pp1 = (char**)p1;
return strcmp(*pp, *pp1);
}
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 value = 0;
int values[10] = {0};
int values1[10][10] = {0};
int *p_value = &value;
//编译时有警告,运行时出错
/*int **pp_value = &values;
printf("%d\n", **pp_value);
int **pp_value = values1;
printf("%d\n", **pp_value);*/
//编译时有警告,运行时正确
/*p_value = &values;
printf("%d\n", *p_value);
p_value = values1;
printf("%d\n", *p_value);*/
/*
int **pp_value = values1;
printf("values1是%p,*values1是%p\n", values1, *values1); //二维数组名称和它前面加*得到的地址数据一样
printf("pp_value是%p,*pp_value是%p\n", pp_value, *pp_value); //二级指针和在它前面加*得到的地址数据是不一样的*/
int (*p_arr)[10] = NULL; //数组指针用来记录一维数组名称的地址或二维数组名称
p_arr = values1;
printf("values1是%p,*values1是%p\n", values1, *values1);
printf("p_arr是%p,*p_arr是%p\n", p_arr, *p_arr);
printf("p_arr + 1是%p,*p_arr + 1是%p\n", p_arr + 1, *p_arr + 1);
return 0;
}
/*
文件操作代码框架
*/
#include <stdio.h>
int main() {
FILE * p_file = NULL; //文件指针声明
p_file = fopen("a.txt", "w"); //代码文件,获得文件指针
if (!p_file) {
//如果没有获得有效文件指针
printf("文件打开失败\n");
return 0;
}
//文件相关操作代码
fclose(p_file); //关闭文件,释放文件指针
p_file = NULL;
return 0;
}
/*
fputc练习
*/
#include <stdio.h>
int main() {
char str[20] = {0};
int loop = 0;
FILE * p_file = NULL; //文件指针声明
p_file = fopen("a.txt", "w"); //代码文件,获得文件指针
if (!p_file) {
//如果没有获得有效文件指针
printf("文件打开失败\n");
return 0;
}
//文件相关操作代码
printf("请输入一个字符串:");
fgets(str, 20, stdin);
for (loop = 0; loop <= 19; loop++) {
if (('\n' == str[loop]) || (0 == str[loop])) {
break;
}
else {
if (EOF == fputc(str[loop], p_file)) {
break;
}
}
}
fclose(p_file); //关闭文件,释放文件指针
p_file = NULL;
return 0;
}
/*
文件复制练习
*/
#include <stdio.h>
int main() {
char ch = 0;
FILE *p_src = NULL, *p_dest = NULL;
p_src = fopen("a.txt", "r");
if (!p_src) {
printf("原文件打开失败\n");
return 0;
}
p_dest = fopen("b.txt", "w");
if (!p_dest) {
printf("目标文件打开失败\n");
fclose(p_src);
p_src = NULL;
return 0;
}
while (EOF != (ch = fgetc(p_src))) {
if (EOF == fputc(ch, p_dest)) {
break;
}
}
fclose(p_src);
fclose(p_dest);
p_src = NULL;
p_dest = NULL;
return 0;
}
/*
fwrite练习
*/
#include <stdio.h>
int main() {
int num = 0;
int values[] = {5, 6, 7, 8, 9};
FILE * p_file = NULL;
p_file = fopen("c.bin", "wb");
if (!p_file) {
printf("文件打开失败\n");
return 0;
}
//批量把一个数组以二进制方式写入到文件中,返回值表示写入数据的个数
num = fwrite(values, sizeof(int), 5, p_file);
printf("共写入%d个整数\n", num);
fclose(p_file);
p_file = NULL;
return 0;
}
/*
fwrite练习
*/
#include <stdio.h>
int main() {
int num = 0, loop = 0;
int values[5] = {0};
FILE * p_file = NULL;
p_file = fopen("c.bin", "rb");
if (!p_file) {
printf("文件打开失败\n");
return 0;
}
//批量以二进制方式从文件中读数据记录到数组中,返回读出的数据个数
num = fread(values, sizeof(int), 5, p_file);
printf("共读出%d个整数\n", num);
for (loop = 0; loop <= 4; loop++) {
printf("%d ", values[loop]);
}
printf("\n");
fclose(p_file);
p_file = NULL;
return 0;
}
/*
rewind练习
*/
#include <stdio.h>
int main() {
int value = 0;
FILE * p_file = fopen("c.bin", "rb");
if (!p_file) {
printf("打开文件失败\n");
return 0;
}
fread(&value, sizeof(int), 1, p_file);
printf("%d\n", value);
printf("位置指针位置是%ld\n", ftell(p_file));
rewind(p_file); //把文件位置指针移动到文件开头
printf("位置指针位置是%ld\n", ftell(p_file));
fread(&value, sizeof(int), 1, p_file);
printf("%d\n", value);
fseek(p_file, 12, SEEK_SET); //位置指针移动到从文件开头向后12个字节的位置
fread(&value, sizeof(int), 1, p_file);
printf("%d\n", value);
fseek(p_file, -12, SEEK_CUR); //位置指针移动到当前位置前面12个字节的地方
fread(&value, sizeof(int), 1, p_file);
printf("%d\n", value);
fseek(p_file, -4, SEEK_END); //位置指针移动到文件末尾前面4个字节的地方
fread(&value, sizeof(int), 1, p_file);
printf("%d\n", value);
fclose(p_file);
p_file = NULL;
return 0;
}
/*
文件格式化操作练习
*/
#include <stdio.h>
int main() {
/*char ch = 'c';
int value = 40;
float f = 4.78f;*/
char ch = 0;
int value = 0;
float f = 0.0f;
FILE *p_file = fopen("d.txt", "r");
if (!p_file) {
printf("文件打开失败\n");
return 0;
}
//fprintf(p_file, "%c %d %g\n", ch, value, f);
fscanf(p_file, "%c %d %f", &ch, &value, &f);
printf("%c %d %f\n", ch, value, f);
fclose(p_file);
p_file = NULL;
return 0;
}
/*
变长参数函数练习
*/
#include <stdio.h>
#include <stdarg.h>
int sum(int cnt, ...) {
int res = 0, loop = 0;
va_list v;
va_start(v, cnt);
for (loop = 0; loop < cnt; loop++) {
res += va_arg(v, int);
}
va_end(v);
return res;
}
void show(int cnt, ...) {
int loop = 0;
va_list v;
va_start(v, cnt);
for (loop = 0; loop < cnt; loop++) {
printf("%d ", va_arg(v, int));
}
printf("\n");
va_end(v);
}
int main() {
show(3, 89, 23, 17);
show(5, 34, 46, 57, 62, 97);
printf("%d\n", sum(3, 1, 2, 3));
printf("%d\n", sum(5, 1, 2, 3, 4, 5));
return 0;
}
/*
C函数介绍
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
char ch = 0;
float f = 0.0f;
char str[10] = {0};
printf("atoi(\"453\")是%d\n", atoi("453"));
printf("atof(\"4.67\")是%lg\n", atof("4.67"));
sscanf("t 4.78", "%c %f", &ch, &f);
printf("%c %g\n", ch, f);
sprintf(str, "%c %g", ch, f);
printf("%s\n", str);
return 0;
}
dsa sdags sdg
c 40 4.67
- 标准C知识10
- 标准C知识03
- 标准C知识04
- 标准C知识06
- 标准C知识07
- 标准C知识08
- 标准C知识09
- 标准C语言关键知识回顾
- unix下C标准文件操作及进程相关知识
- 10,标准C
- 知识交换标准
- c标准
- C + +标准
- C标准
- c标准
- C标准
- c++标准库知识梳理
- 关于标准的一些知识
- 如何更换新的 LCD 屏
- 2.3.1: 基本选择器
- MAC OSX10.9 下编译使用OGRE1.9及CEGUI 0.8.3(一)OGRE依赖库的编译
- Android 中写 Service
- Struts2架构
- 标准C知识10
- 指针
- Building and packaging mobile apps in Dreamweaver CC
- poj1664放苹果(dfs与递推,两种方法)
- 2013.11.30正式入住CSDN
- windows下Qt5.2 for android开发环境搭建
- spring2.0-2.5-3.0变化
- 在 32 位系统中安装 Android 编译环境(不成功)
- 安卓listview 的.addFooterView(View foot)