欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
}




相关标签: c fp