指向结构的指针
前言结构指针与结构数组,他们一起使用时会更加方便。就像指针和数组。 结构指针的声明struct guy * him 指向 him = &fellow[0]但是有一点需要注意:单纯的结构数组名没有作用数组的变量名是数组的首元素地址。结构数组的变量名不是结构数组的首结构地址。所以但要将首结构的地址赋给指针时,要加上&和[0] 用指针访问him->handle.first//意义:用him指针指向成员的成员等价于(*him).handle.first//意义:取值为结构struct guy fellow[0]这个结构这里必须要用(),因为.比*的优先级高。 示例12345678910111213141516171819202122232425262728293031323334353637383940414243/* friends.c -- uses pointer to a structure */#include <stdio.h>#define LEN 20struct names...
结构体声明和初始化
Introduction声明结构类型声明struct person{...}; 这个struct person起的作用就是一般声明中的int 例如:定义struct person类型的变量。struct person ferry, *pferry 声明过程与定义结构变量,可以组合成一个步骤。 12345struct /*无结构标记*/{ int a; int b;}library; 但如果要多次使用模板,就要加上标记。 1234567typedef struct BTNode{ char data; struct BTNode* lchild; struct BTNode* rchild;}BTNode; 这时编译器还没有在内存中分配空间。什么时候开始分配呢,当然是在初始化变量的时候。 初始化结构变量struct person...
again再探字符串输入的分配空间
前言我们平时使用char str[] = "ferry";可以。char str[10]; str = "ferry";不可以。然鹅,还有给结构中的成员赋值的时候,可以直接用字符串初始化。这些原因都是因为开辟空间的问题。 说明在初始化变量时,分配空间。结构也是如此。 不能将指针赋值给常量char str1[]是array typestr1是常量,不是指针啊~char *str2str2是个指针(是个变量) 错误,不能给数组的地址(常量)赋值12345678910#include<stdio.h>int main(int argc, char *argv[]){ char str1[30];//已经分配好空间。 char * str2; str2 = "ferry"; str1 = str2;//错误,str1是个地址 return...
压缩文件(交互式)
函数strncpy() 作用限制最大字符复制字符串,要比strcpy()更安全 参数(字符串指针,被复制的字符串指针,最大个数) 示例12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758#include<stdio.h>#include<stdlib.h>//提供exit()原型#include<string.h>//提供strcpy(),strcat()原型#define LEN 40char * s_gets(char * st, int n);int main(int argc, char *argv[]){ char name[LEN]; char file[LEN]; char ch; int ct = 0; FILE *in; FILE *out; printf("Please enter file...
fread()和fwrite()
了解这两个函数是以二进制形式处理数据中,不同于其他I/O函数,是以文本形式处理。 函数fread() 作用:将文件中的内容拷贝到数组中 参数:(地址,数据块,数据块个数,文件指针) 返回值:两种情况:1.返回文件中成功读取项的数量。2.遇到文件结尾返回0 fwrite() 作用:将n个数据块拷贝到文件中 参数(地址,数据块,数据块的个数,文件指针) 示例123456789101112131415161718192021222324252627282930313233#include<stdio.h>#include<stdlib.h>#define SIZE 256int main(int argc, char *argv[]){ FILE *in, *out; int bytes; char temp[SIZE]; if (argc != 3) { fprintf(stderr, "Usage: %s filename\n",...
标准文件(万物皆文件)
说明 stdio.h头文件把3个文件指针(stdin,stdout,stderr),与3个标准文件相关联。C程序会自动打开这3个标准文件 Q&AQ唉?为什么跟我们平时所看到的文件(word文档,txt文件。。。)不一样?那么这些文件又是放在哪里,是在磁盘吗? A操作系统为了对各种硬件进行操作,简化接口。所以,把电脑的硬件设备也看成了文件。如:scanf()函数的作用,就是从stdin(键盘)上面获取信息。printf()函数的作用,就是从stdout(显示器)上输出信息。 标准输入 指针:stdin 设备:键盘 标准输出 指针:stdout 设备:显示器 标准错误 指针:stderr 设备:显示器 有了这个基础,可以暂时看作万物皆文件 例如 这两行代码本质上一样 123fprintf(stdout, "%s", string);printf("%s", string); 这行的区别也只不过是写在标准错误上 1fprintf(strerr, "%s", string);
面向行fgets()和fputs()
前言该函数是面向行操作。不同于,getc()是处理字符 函数fgets() 作用把读入的内容添加到字符串中。 参数(字符串地址,字符个数,FILE指针) 返回值如果读到文件结尾(EOF),返回NULL如果还没有到EOF,返回之前传给它的字符串地址 范围 1.读取到第一个换行符后面。2.读到文件结尾3.读到字符个数-14.如果读到字符上限已经读完一行,则会把结尾的’\n’放在’\0’前面最后,在最后一个字符后面加’\0’ Don’t forget...
fprintf()和fscanf()
前言这两个函数与printf()和scanf()函数类似。scanf()printf()的返回值为成功输入的数据个数如scanf(”%d%d%s”,&a,&b,s);执行成功返回3.scanf(”%d%d”,&a,&b);执行成功返回2. 如果在输入的过程中scanf(“%d%d”,&a,&b);由于某种原因只有a输入成功了则返回1,a、b都没成功则返回0 如果遇到错误或遇到end of file,返回EOF(一般宏定义EOF为-1)。 区别加多第一个参数(FILE指针) rewind(); 参数:FILE指针 作用回到文件开头 示例输入到文件中12345678910111213141516171819202122232425262728293031#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 41int main(void){ FILE *fp; char...
面向字符getc()和putc()
前言面向字符操作。 这两个函数类似于getchar()和puchar(‘ch’)。 区别在后面加多一个参数(FILE指针) 函数fopen() 函数声明:在stdio.h中 参数(文件名,读写等模式) 返回:文件指针FILE * fp; 文件指针并不指向实际的文件,它指向一个包含文件信息的数据对象,其中包含I/O函数所用的缓冲区信息。 getc()类似于getchar() 参数(FILE指针) 返回:文件中的一个字符 与getchar()函数类似,getchar()是从标准输入中获取字符。而,getc()是从指定文件中获取字符 putc()类似于putchar() 参数(一个字符,FILE指针) 作用将这个字符放入指定的文件中 exit() 函数声明:在stdlib.h头文件中 参数正常结束传递0,非正常传递非0值. 作用关闭所有打开文件,并结束程序 与return...
Layout(布局)
1container.setLayout(new Layout的类()) null布局传给Layout()null参数再setBounds(,,,,)按钮的坐标和大小 123456789101112131415161718192021222324package 绝对布局;import java.awt.*;import javax.swing.*;public class Demo extends JFrame{ public Demo() { setBounds(200, 200, 500, 300); setDefaultCloseOperation(EXIT_ON_CLOSE); Container c = getContentPane(); c.setLayout(null);//设置布局 JButton b1 = new JButton("按钮1");//新建按钮对象 JButton b2 = new JButton("按钮2"); b1.setBounds(20, 30, 80,...
