c语言笔记-2
来源:互联网 发布:网络贷款无力偿还 编辑:程序博客网 时间:2024/05/21 18:47
定义一个指向函数的指针
#include <stdio.h>int max(int x, int y){ return x > y ? x : y;}int main(void){ /* p 是函数指针 */ int (* p)(int, int) = & max; // &可以省略 int a, b, c, d; printf("请输入三个数字:"); scanf("%d %d %d", & a, & b, & c); /* 与直接调用函数等价,d = max(max(a, b), c) */ d = p(p(a, b), c); printf("最大的数字是: %d\n", d); return 0;}
结构体
#include <stdio.h>int main(void){ //定义结构体相当于类模板 struct Books{ char title[50]; char author[50]; char subject[100]; int book_id; }; //创建结构体变量 相当于创建对象实例 struct Books book1; struct Books book2; //strcpy c语言的标准库函数,将后面的字符串复制到book1.title中 strcpy( book1.title, "C Programming"); strcpy( book1.author, "Nuha Ali"); strcpy( book1.subject, "C Programming Tutorial"); book1.book_id = 1000; strcpy( book2.title, "Telecom Billing"); strcpy( book2.author, "Zara Ali"); strcpy( book2.subject, "Telecom Billing Tutorial"); book2.book_id = 2000; printf("%s %s",book1.title,book2.title); return 0;}
dev c++自定义头文件
头文件格式
文件名:mymath.h,与下面ifndef等对应
//这样写是为了防止多次引入 #ifndef _mymath_H#define _mymath_H/////////////代码段//////////////int test;void myfun(){ printf("xxxxxxlkajsdflajsdflkjalksdfjlakkkkkkkk\n\n");}/////////////代码段//////////////#endif
便可以下main.h中是用了
#include <stdio.h>//引入自定义的文件#include "mymath.h"int main(void){ //使用自定义头文件中的变量和方法 test = 100; printf("xxxx%d\n",test); myfun();
命令行参数
int main( int argc, char *argv[]){ //开始程序是传入的参数 if(argc == 2){ printf("第一个参数%s\n",argv[1]); }else if(argc > 2){ printf("第一个参数%s\n",argv[1]); printf("第二个参数%s\n",argv[2]); }else{ printf("传入的s参数不是2个\n"); }
在生成exe文件处打开cmd(shift键+鼠标右键)
点击“在此处打开命令创(W)”,
第一个参数都是程序名称hello.exe,第二个参数开始才是传入程序的参数
函数传入参数个数可变,以后还需要加强
//文件代码
#include <stdio.h>#include <stdarg.h>#include <stdlib.h>#include "mymath.h"#include <errno.h>//http://blog.csdn.net/gongda2014306/article/details/50769729//http://download.csdn.net/download/henryying/962990 int main( int argc, char *argv[]){ //开始程序是传入的参数 if(argc == 2){ printf("第一个参数%s\n",argv[1]); }else if(argc > 2){ printf("第一个参数%s\n",argv[1]); printf("第二个参数%s\n",argv[2]); }else{ printf("传入的s参数不是2个\n"); } test = 100; printf("xxxx%d\n",test); myfun(); //定义结构体相当于类模板 struct Books{ char title[50]; char author[50]; char subject[100]; int book_id; }; //创建结构体变量 相当于创建对象实例 struct Books book1; struct Books book2; //strcpy c语言的标准库函数,将后面的字符串复制到book1.title中 strcpy( book1.title, "C Programming"); strcpy( book1.author, "Nuha Ali"); strcpy( book1.subject, "C Programming Tutorial"); book1.book_id = 1000; strcpy( book2.title, "Telecom Billing"); strcpy( book2.author, "Zara Ali"); strcpy( book2.subject, "Telecom Billing Tutorial"); book2.book_id = 2000; printf("%s %s\n\n",book1.title,book2.title); //共用体:这是一个特殊的数据结构,在结构体中可以包含多种类型的数据结构,如下 union Data { int i; float f; char str[20]; }; //其实就是一个变量名Data指向一块连续的地址,地址的长度为结构体中变量占最大的长度,每赋值一次,都是将前面的值覆盖, union Data data; data.i = 10; data.f = 100.23; strcpy(data.str,"aaaaaa"); printf("data的内存大小%d个字节,一个英文字母一个字节\n",sizeof(data)); printf("i的值为10,可以看到i的值损坏了%d\n",data.i); printf("f的值为100.23,可以看到i的值损坏了%f\n",data.f); printf("最后一次赋值给data才是有效的:%s",data.str); /* 实际效果以后再了解,大致的了解一下便可以了 */ printf("我们可以有程序知道当前int占用了%d个字节长度\n",sizeof(int)); //为了节省空间 ,比喻我们只需要存储0或1,由此可知我们只需要一个二进制存放长度的内存 //1. 一个位域必须存储在同一个字节中,不能跨两个字节,故位域的长度不能大于一个字节的长度。 //如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始 // struct test{// unsigned int a:1;//占一个二进制位 // unsigned int b:5;//占5个二进制位 // }; //C 语言把所有的设备都当作文件。 //菜鸟教程中的c语言的输入输出可以看一下 //文件的读写 FILE *fp = NULL; //打开指定的文件 ,允许读写 , 后面的 一个详细的参数,参照http://www.runoob.com/cprogramming/c-file-io.html fp= fopen("D:/a.txt","w+"); //两种不同的方式写入两行数据 fprintf(fp,"xxxxxxxx\n"); fputs("ssssssss\n",fp); //关闭文件 fclose(fp); //读取文件 FILE *fp1 = NULL; char buff[255] ; fp1= fopen("D:/a.txt","r"); //读取文件的方式一: // fscanf(fp1,"%s",buff) ;// printf("1: %s\n",buff); //读取文件的方式二: fgets(buff,255,(FILE*)fp1); printf("2: %s\n",buff); fgets(buff,255,(FILE*)fp1); printf("3: %s\n",buff); fclose(fp1); //二进制的方式 FILE *fp2 = NULL; fp2 = fopen("D:\\test.txt", "r+"); // 确保 test.txt 文件已创建 fprintf(fp2, "This is testing for fprintf...\n"); fseek(fp2, 10, SEEK_SET); if (fputc(65,fp2) == EOF) { printf("fputc fail"); } fclose(fp2); //退出程序 //exit(-1); //exit(EXIT_SUCCESS);//这个退出程序需要加头文件#include <stdlib.h> //错误 //需要引入头文件:#include <errno.h> FILE * pf3; int errnum; pf3 = fopen ("unexist.txt", "rb"); if (pf3 == NULL) { errnum = errno; fprintf(stderr, "错误号: %d\n", errno); perror("通过 perror 输出错误"); fprintf(stderr, "打开文件错误: %s\n", strerror( errnum )); } else { fclose (pf3); } average(3, 5,10,15); //printf("Average of 5, 10, 15 = %d\n", average(3, 5,10,15)); return 0;}/**问题:1.如何写返回值,有返回值就报错 2.传递不同类型的参数该如何做 *///定义参数数量可变的函数 void average(int num,...){ va_list valist; double sum = 0.0; int i; /* 为 num 个参数初始化 valist */ va_start(valist, num); printf("参数的个数num的值: %d\n",num); //这个取值的过程类似堆栈 // printf("第0个参数参数的类型为int--%d\n",va_arg(valist,int));// printf("第1个参数参数的类型为int--%d\n",va_arg(valist,int));// printf("第2个参数参数的类型为int--%d\n",va_arg(valist,int)); /* 访问所有赋给 valist 的参数 */ for (i = 0; i < num; i++) { sum = sum + va_arg(valist,int); } double arvgtest= sum/num; printf("所有传入参数的和sum = : %lf\n",arvgtest); /* 清理为 valist 保留的内存 */ //va_end(valist);}
阅读全文
0 0
- C语言笔记2
- C语言笔记2
- C语言笔记2
- C语言 笔记2
- C语言笔记2
- c语言笔记2
- c语言笔记-2
- C语言学习笔记(2)
- C语言学习笔记2
- c语言学习笔记2
- C语言学习笔记2
- c语言剖析笔记2
- C语言学习笔记2
- C语言学习笔记2
- C语言笔记(2)
- C语言笔记(2)
- c语言学习笔记2
- C语言复习笔记 2
- 标题栏渐变效果的实现
- 面试常考的常用数据结构与算法
- ERROR_COLLECTION
- android textview 代码设置字体大小包含适配
- python中的条件判断语句
- c语言笔记-2
- FFmpeg处理视频和音频的相关链接
- 数据可视化
- java交换变量值的几种方法
- RabbitMQ入门-7(单发送多接收)
- AI和区块链如何搅动数字营销?
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 盘点·GitHub最著名的20个Python机器学习项目
- Java 十大异常报错(Exception)