c_04 结构体—important
来源:互联网 发布:免费的数据恢复工具 编辑:程序博客网 时间:2024/06/08 09:39
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include<Windows.h>
//结构体是一种构造数据类型
//把不同的数据类型结合起来成为 : 一个自定义的数据类型
/*
struct Man{
//成员
char name[20]; //a
//char* name; //b
int age;
//int(*func)();
};
void main(){
//初始化结构体类型的变量
//方式一:
// struct Man person = { "charles", 27 };
//方式二:
struct Man person;
person.age = 27;
//person.name = "charles"; //b 指针字符串才可以 成员 char* name;
//strcpy(person.name, "charles"); //a
sprintf(person.name,"jack");
printf("%s,%d\n",person.name,person.age);
getchar();
}
*/
//结构体的几种写法
/*
struct Men{
char name[20];
int age;
} m1, m2 = {"Rose",18};//m1 结构体变量名
void main(){
strcpy(m1.name,"jack");
m1.age = 20;
printf("%s,%d\n",m1.name,m1.age);
printf("%s,%d\n", m2.name, m2.age);
getchar();
}
*/
//匿名结构体
//主要用于控制结构体变量的个数(限量版只能通过m1来使用该结构体)
/*
struct {
char name[20];
int age;
} m1;
*/
//结构体嵌套
/*
struct Teacher{
char name[20];
};
struct Student{
char name[20];
int age;
struct Teacher t;
};
void main(){
struct Student s1 = { "Jason", 23, { "Vivi" } };
struct Student s2;
s2.age = 10;
strcpy(s2.name, "Jason");
strcpy(s2.t.name,"Vivi"); //链式命名
system("pause");
}
*/
/*
struct Student{
char name[20];
int age;
struct Teacher{ //内部匿名结构体
char name[20];
} t;
};
void main(){
struct Student s1;
strcpy(s1.t.name,"Tom");
}
*/
/*
//结构体与指针
struct Man{
char name[20];
int age;
};
void main(){
struct Man m1 = {"Jack",30};
//结构体指针
struct Man *p = &m1;
printf("%s,%d\n",m1.name,m1.age);
printf("%s,%d\n", (*p).name, (*p).age);
// -> (箭头符号)是(*p).的简写形式 表示指针对应的结构体对象的成员
printf("%s,%d\n", p->name, p->age);
}
*/
/*
//结构体数组与指针
struct Man{
char name[20];
int age;
};
void main(){
struct Man mans[] = { { "Jack", 20 }, {"Rose",22} };
//结构体指针
struct Man *p = mans;
//指针遍历
for (; p < mans + sizeof(mans)/sizeof(struct Man);p++){
printf("%s,%d\n", p->name, p->age);
}
//下标遍历
int i = 0;
for (; i < sizeof(mans) / sizeof(struct Man);i++){
printf("%s,%d\n", mans[i].name, mans[i].age);
}
getchar();
}*/
//结构体的大小 (字节对齐)
/*
struct Man{
int age; //4字节 -->对象中占8个字节 和最大的那个属性类型的字节长度对齐
double weight; //8字节
};
void main(){
//结构体变量的大小,必须是最宽基本数据类型的整数倍 eg:本例中必须是double的整数倍 12--》16
//浪费空间 换取读取的时间 提高了读取效率---》 固定长度
struct Man mm = { 22, 68.5 };
printf("%#x,%d\n",&mm,sizeof(mm)); //0xd3f790,16
getchar();
}
*/
/*
struct Man{
char *name;
int age;
};
//结构体动态内存分配
void main(){
struct Man *m_p = (struct Man*) malloc(sizeof(struct Man)*5); //动态内存分配5个sturct Man类型的大小
struct Man *p = m_p;
//赋值
p->age = 22;
p->name = "Jack";
p++;
p->age = 25;
p->name = "Rose";
struct Man *loop_p = m_p;
for (; loop_p < m_p + 2;loop_p++){
printf("%d,%s\n", loop_p->age,loop_p->name);
}
free(m_p); //释放内存
getchar();
}
*/
typedef: 简单的说,就是按照定义变量的方式,把变量名换成新类型名,
并且在最前面加上"typedef",就声明了行类型名代表原来的类型.
eg:
以定义数组类型为例来说明:
1.先按照定义数组变量形式书写: int a[20];
2.将变量名称改为自己命名的类型名 int Num[20];
3.在前面加上"typedef"得到 typedef int Num[20];
4.用自定义类型名来定义变量 Num a -->相当于定义了 int a[20];
eg:
void showMsg(char*msg, char*title){
MessageBox(0,msg,title,0);
}
typedef void(*Jfun)(char*m, char*n); //函数指针用别名取代 使用起来简单易懂 类似java类
void main(){
//double f = 2.5;
//double *int_poniter = &f;
//printf("%lf",*int_poniter);
//原生
//void(*fun_p)(char*m, char*n) = showMsg;
//fun_p("how are you !","say Hi");
//用别名
Jfun fun = showMsg;
fun("how are you !", "say Hi");
getchar();
}
//小知识点:
字符数组赋值只能在声明时, //字符指针可以更改赋值,但是不能更改某个元素
char a[20]; a="hello"; //无法日通过编译
char a[20] = "hello";//声明时赋值
a="Morning"//这是无法通过编译的
a[0] = ’H‘;//可以更改某个元素
//想要重新赋值 只能通过一些字符串函数实现:strcpy(a, "Morning");
//typedef 类型取别名
//1.不同的名称代表在做不同的事 typedef int jint
//2.不同的情况下使用不同的别名 typedef _JNIEnv JNIEnv;t ypedef _JavaVM JavaVM;
//3.书写简洁
//常见类型取别名
typedef int* Ap;
typedef int Age;
//-----------------
struct Man{
char *name;
int age;
};
//结构体取别名 的两种方式
//方式一:根据需要想取别名时才去定义
typedef struct Man JavaMan;
typedef struct Man *JM;
//方式二:定义结构体的时候直接取别名
typedef struct Woman{
char* name;
int age;
} W,*Wp;
Age i = 20;
Ap t = &i;
printf("%d\n",i);
printf("%d\n",*t);
//==================
W w = { "charles", 23 };
Wp wp = &w;
printf("%d,%s\n",wp->age,wp->name);
getchar();
}
*/
//结构体函数指针成员
typedef struct Girl {
char *name;
int age;
//函数指针
void(*sayHi)(char*);
} JGirl;
//Girl 结构体类似于Java中的类,name age 类似属性 ,sayHi类似于方法
//Girl 结构体指针取别名
typedef struct Girl* Girlp;
void sayHello(char* str){
MessageBox(0, str, "Say Hi :", 0);
}
//Girlp == Girl*
void reName(Girlp glp){
glp->name = "Jhon";
}
void main(){
//原生创建结构体对象
struct Girl girl = {
"Lily", 22, sayHello
};
//用别名创建结构体对象
JGirl jgirl = {
"Lily", 22, sayHello
};
//原生创建结构体指针
struct Girl* girl = &girl;
//用结构体指针别名创建结构体指针
Girlp gp = &jgirl;
//传递指针,给结构体对象改名
reName(gp);
printf("%s\n",gp->name);
gp->sayHi("你好啊!");
//girl.sayHi("how are you !");
getchar();
}
- c_04 结构体—important
- CSS——!important
- important
- important
- !important
- !important
- CSS——important和盒模型
- CSS——!important的使用场景
- The Elephant Man——Chapter 5 An Important Visitor
- 大学英语六级听力——014(the important confidence)
- 词汇-important
- important information
- flash important
- css important
- something important
- important homepage
- Important Links
- !important用法
- scala
- 二分
- Reverse Linked List II
- AC自动机(HDU 2222: Keywords Search)
- MVC设计模式
- c_04 结构体—important
- HTML模板渲染引擎Hogan
- 欢迎使用CSDN-markdown编辑器
- 笔记本怎么建立局域网
- 定时任务设计(一)
- NYOJ题目76-超级台阶
- dispatch_group实践,AFN3.0多个网络请求
- 腾讯大牛教你web前后端漏洞分析与防御-Cookie
- kudu1.4.0 安装配置