/*……………………………………………………………………………………………………………………………………………………/
*标题:000
*作者:宕机酱
*完成时间:2015.6.21
*注释:
/…………………………………………………………………………………………………………………………………………………………*/
#include <stdio.h>
int main()
{
int a;
int *p;
p = &a;
*p = 233;
printf("Before *p = 233, *p = %d\n",*p);
a = 2333;
printf("Before a = 2333, *p = %d\n",*p);
printf("看来指针连接的强度真是硬呢。a不是地址,&a才是地址\n");
//p = &21331; error
printf("Code Access~\n");
return 0;
}
KimonoYan@KimonoYan-virtual-machine:~/vcdir/vc_review$ cat 002_struct结构体.c
/*……………………………………………………………………………………………………………………………………………………/
*标题:自测_
*作者:宕机酱
*完成时间:2015.6.21
*注释:
/…………………………………………………………………………………………………………………………………………………………*/
#include <stdio.h>
#include <string.h>
struct student
{
int inum;
char cname[3];
int isex;
};
int main()
{
struct student A;
A.inum = 4;
strcpy(A.cname,"ddd");
printf("A.inum = %d,A.cname = %s\n",A.inum,A.cname);
printf("Code Access~\n");
return 0;
}
KimonoYan@KimonoYan-virtual-machine:~/vcdir/vc_review$ cat 003_struct_init.c
/*……………………………………………………………………………………………………………………………………………………/
*标题:自测_
*作者:宕机酱
*完成时间:2015.6.21
*注释:
/…………………………………………………………………………………………………………………………………………………………*/
#include <stdio.h>
#include <string.h>
struct student
{
int inum;
char cname[3];
int isex; //经过尝试,此处不允许赋值
}; //记得加分号
int main()
{
struct student A = {1,'2',3}; //和数组无二样
// strcpy(A.cname,"ddd");
*(A.cname+1) = 's';
printf("A.inum = %d,A.cname = %s\n",A.inum,A.cname);
printf("Code Access~\n");
return 0;
}
KimonoYan@KimonoYan-virtual-machine:~/vcdir/vc_review$ cat 004_union.c
/*……………………………………………………………………………………………………………………………………………………/
*标题:自测_
*作者:宕机酱
*完成时间:2015.6.21
*注释:共用体的元素,对一个进行赋值所有的值都是这个,但数据类型可以不一样
/…………………………………………………………………………………………………………………………………………………………*/
#include <stdio.h>
#include <string.h>
union Myunion
{
int icode;
char ccode;
float fcode; //经过尝试,此处不允许赋值
}; //记得加分号
int main()
{
union Myunion A;
A.icode =115;
//A.fcode = 4.4;
printf("A.inum = %d,A.cname = %c,A.fcode = %f\n",A.icode,A.ccode,A.fcode);
printf("Code Access~\n");
return 0;
}
KimonoYan@KimonoYan-virtual-machine:~/vcdir/vc_review$ cat 005_嵌套结构体.c
/*……………………………………………………………………………………………………………………………………………………/
*标题:自测_
*作者:宕机酱
*完成时间:2015.6.21
*注释:
/…………………………………………………………………………………………………………………………………………………………*/
#include <stdio.h>
#include <string.h>
struct Class
{
int classnum;
int grade;
};
struct student
{
int snum;
int sname;
struct Class class;
};
union Myunion
{
int icode;
char ccode;
float fcode; //经过尝试,此处不允许赋值
}; //记得加分号
int main()
{
struct student A;
A.snum = 1001;
A.class.grade = 4;
printf("A.snum = %d,A.grade = %d\n",A.snum,A.class.grade);
printf("Code Access~\n");
return 0;
}
KimonoYan@KimonoYan-virtual-machine:~/vcdir/vc_review$ cat 006_strcut+union.c
/*……………………………………………………………………………………………………………………………………………………/
*标题:自测_
*作者:宕机酱
*完成时间:2015.6.21
*注释:
/…………………………………………………………………………………………………………………………………………………………*/
#include <stdio.h>
#include <string.h>
struct ScoreForMale
{
int basketball;
int football;
};
struct ScoreForFemale
{
int hula;
int xiuhua;
};
union student
{
struct ScoreForMale m;
struct ScoreForFemale f; //意义在于节省空间
}; //记得加分号
int main()
{
union student A[30];
A[1].m.football = 1001;
A[2].f.hula = 4;
printf("A.m.football = %d,A.f.hula = %d\n",A[1].m.football,A[2].f.hula);
printf("Code Access~\n");
return 0;
}
KimonoYan@KimonoYan-virtual-machine:~/vcdir/vc_review$ cat 007_enum枚举.c
/*……………………………………………………………………………………………………………………………………………………/
*标题:自测_
*作者:宕机酱
*完成时间:2015.6.21
*注释:
/…………………………………………………………………………………………………………………………………………………………*/
#include <stdio.h>
#include <string.h>
enum week
{
MON,TUN,WEN
};
int main()
{
enum week day;
day = MON;
switch(day)
{
case MON:
printf("1");break;
case TUN:
printf("2");break;
default :break;
}
printf("Code Access~\n");
return 0;
}
KimonoYan@KimonoYan-virtual-machine:~/vcdir/vc_review$ cat 008_int占4Bytes.c
/*……………………………………………………………………………………………………………………………………………………/
*标题:自测_
*作者:宕机酱
*完成时间:2015.6.21
*注释:
/…………………………………………………………………………………………………………………………………………………………*/
#include <stdio.h>
int main()
{
unsigned short a=-1;
printf("sizeof unsigned int a = %d,a = %d",(sizeof(a)),a);
printf("Code Access~\n");
return 0;
}
KimonoYan@KimonoYan-virtual-machine:~/vcdir/vc_review$ cat 009_void空类型指针.c
/*……………………………………………………………………………………………………………………………………………………/
*标题:自测_
*作者:宕机酱
*完成时间:2015.6.21
*注释:vo
/…………………………………………………………………………………………………………………………………………………………*/
#include <stdio.h>
void test(void)
{
printf("!!!\n\n\n");
}
int main()
{
//test('s'); //这里会报错
void *pvoid; //p是一个指针,指向一个void型的
int a = 233;
//int b;
pvoid = &a;
//b = pvoid;
printf("*(float *)pvoid = %f\n",*(float *)pvoid);
printf("*(int *)pvoid = %d,此处格式要记住(int *)强制转换成int指针,放于'*'之后,不转换报错\n\n",*(int *)pvoid);
printf("Code Access~:参数为void的函数,为[任意]类型返回值,但该返回值是是无意义的,编译器还是会拦下来\n");
printf("void *p 是p指向一个[任意类型]的数,注意存取类型.取消编译器检查可以帮你从int转float无警告越界。但小心危险\n");
return 0;
}
KimonoYan@KimonoYan-virtual-machine:~/vcdir/vc_review$ cat 010_数据类型转换.c
/*……………………………………………………………………………………………………………………………………………………/
*标题:自测_
*作者:宕机酱
*完成时间:2015.6.21
*注释:
/…………………………………………………………………………………………………………………………………………………………*/
#include <stdio.h>
int main()
{
auto int a = 3;
float b = 3.5;
void *p = &b;
int c;
c= a+b;
printf("int a = 3 , float b = 3.5 \n");
printf("a+b =(f) %f \n",a+b);
printf("a+b =(d) %d ,可以看出float被当做int解析了一定会出错\n",a+b);
printf("a+b = (d) %d ,用空指针也没有用\n",a + (*(int *)p));
printf("int c = a+b; c = %d 居然是6!c语言中最难的地方\n",c);
printf("Code Access~\n");
return 0;
}
KimonoYan@KimonoYan-virtual-machine:~/vcdir/vc_review$ cat 011_static变量.c
#include<stdio.h>
void fun(void );
int main()
{
auto int a;
register int b;
fun();
fun();
fun();
printf("Code Access! static变量在多次调用函数的时候,仅[第一次]定义并初始化。\nauto int = int register关键字访问更快,但数量有限且不能定义成double类型");
return 0;
}
void fun()
{
static i=0;
i++;
printf("Now. i = %d\n",i);
}
KimonoYan@KimonoYan-virtual-machine:~/vcdir/vc_review$ cat 012a_跨文件调用函数1.c
/*……………………………………………………………………………………………………………………………………………………/
*标题:自测_
*作者:宕机酱
*完成时间:2015.6.21
*注释:
/…………………………………………………………………………………………………………………………………………………………*/
#include <stdio.h>
void fun_b(void);
int main()
{
printf("This is A file.\n");
fun_b();
printf("Code Access~注意使用方法:gcc 012a.. 012b.. -o build ab ./ab\n多个文件只能保留一个主函数,允许直接/间接访问,但要记得声明、定义、调用缺一不可");
return 0;
}
KimonoYan@KimonoYan-virtual-machine:~/vcdir/vc_review$ cat 012b_跨文件调用函数2.c
/*……………………………………………………………………………………………………………………………………………………/
*标题:自测_
*作者:宕机酱
*完成时间:2015.6.21
*注释:
/…………………………………………………………………………………………………………………………………………………………*/
#include <stdio.h>
void fun_b()
{
printf("This is B file.~\n");
}
KimonoYan@KimonoYan-virtual-machine:~/vcdir/vc_review$ cat 013a_跨文件引用变量.c
/*……………………………………………………………………………………………………………………………………………………/
*标题:自测_
*作者:宕机酱
*完成时间:2015.6.21
*注释:
/…………………………………………………………………………………………………………………………………………………………*/
#include <stdio.h>
void fun_b(void);
int a = 0;
int main()
{
printf("This is A file.a = %d \n",a++);
fun_b();
printf("Code Access~注意使用方法:gcc 012a.. 012b.. -o build ab ./ab\n跨文件变量不能直接用,a.c中的全局变量不能直接在b.c中使用。\n方案1:偷梁换柱,把b.c要用的全局变量放到a.c的一个函数中,让b.c声明并调用a.c中的函数(间接使用)\n方案2:仅需在b文件中[声明]全局变量(extern int a;这样就行了,直接使用)\n");
return 0;
}
KimonoYan@KimonoYan-virtual-machine:~/vcdir/vc_review$ cat 013b_跨文件引用变量2.c
/*……………………………………………………………………………………………………………………………………………………/
*标题:自测_
*作者:宕机酱
*完成时间:2015.6.21
*注释:
/…………………………………………………………………………………………………………………………………………………………*/
#include <stdio.h>
void fun_b(void);
void fun_b()
{
extern int a;
printf("This is B file.a = %d\n",a);
//printf("Code Access~注意使用方法:gcc 012a.. 012b.. -o build ab ./ab\n多个文件只能保留一个主函数,允许直接/间接访问,但要记得声明、定义、调用缺一不可");
}
KimonoYan@KimonoYan-virtual-machine:~/vcdir/vc_review$ cat 014_静态全局变量.c
#include<stdio.h>
void fun(void );
static int siA;
int main()
{
auto int a;
register int b;
fun();
fun();
fun();
printf("Code Access! 普通全局变量在多文件中不能重名,静态全局变量专门用来解决大项目重名问题。\n告诉编译器这个静态全局变量只会在当前文件内使用,绝不可能在其他地方使用。\n");
return 0;
}
void fun()
{
static i=0;
i++;
printf("Now. i = %d\n",i);
}
KimonoYan@KimonoYan-virtual-machine:~/vcdir/vc_review$ cat 015_const与指针.c
/*……………………………………………………………………………………………………………………………………………………/
*标题:自测_
*作者:宕机酱
*完成时间:2015.6.21
*注释:注意!这四个写法完全不一样
/…………………………………………………………………………………………………………………………………………………………*/
#include <stdio.h>
int main()
{
const int *p1; //
int const *p2; //
int *const p3; //
const int *const *p4; //
printf("Code Access~\nconst int *p1 //p是一个指针,指针指向一个const型的数据。P1 -> const int a/b/c...\nint const *p2 //同上\nint *const p3 //我自己理解为int (*const p3),指向一个int型数据,p3本身是常量,指向的数内容可变. \nconst int *const p4 //我自己理解为 const int (*const p4),指向一个int型数据,内容和指针都不可变.\n");
return 0;
}