0
点赞
收藏
分享

微信扫一扫

初识结构体

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//初始结构体

//struct stu //struct-结构体关键字 stu-结构体标签 struct stu-结构体类型
//{
// char name[20];
// short age;
// char tele[12];
// char sex[5];
//}s1,s2,s3;//s1,s2,s3-全局的结构体变量
//int main()
//{
// struct stu s;//s-局部的结构体变量
// return 0;
//}
//
//typedef struct stu//typedef-给这个类型重新起名
//{
// char name[20];
// short age;
// char tele[12];
// char sex[5];
//}stu;//起名为stu
//int main()
//{
// stu s1 = { "张三",20,"15866998877","男" };
// struct stu s2 = { "李四",25,"18957568899","保密" };
// return 0;
//}


//struct S
//{
// int a;
// char c;
// char arr[20];
// double d;
//};
//struct T
//{
// char ch[10];
// struct S s;
// char* pc;
//};
//int main()
//{
// char arr[] = "hello world\n";
// struct T t = { "hehe",{100,"w","hello hello",3.15}, arr};
// printf("%s\n", t.ch);//hehe
// printf("%s\n",t.s.arr);//hello hello
// printf("%lf\n", t.s.d);//3.15
// printf("%s\n", t.pc);//hello world
// return 0;
//}


//结构体传参的时候,要传结构体的地址.
//typedef struct stu
//{
// char name[20];
// short age;
// char tele[12];
// char sex[5];
//}stu;
//void Print1(stu tmp)
//{
// printf("name:%s\n", tmp.name);
// printf("age :%d\n", tmp.age);
// printf("tele:%s\n", tmp.tele);
// printf("sex :%s\n", tmp.sex);
//}
//void Print2(stu* tmp)//首选这个方法
// //函数传参的时候,参数是需要压栈的,如果传递一个结构体对象的时候,
// //结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降.
//{
// printf("name:%s\n", tmp->name);
// printf("age :%d\n", tmp->age);
// printf("tele:%s\n", tmp->tele);
// printf("sex :%s\n", tmp->sex);
//}
//int main()
//{
// stu s = { "李四",20,"15588886677","男" };
// Print1(s);
// Print2(&s);
// return 0;
//}


//栈区----局部变量,函数的形式参数,函数调用开辟的空间
//堆区----动态内存分配(malloc,free,realloc,calloc)
//静态区--全局变量,静态变量
//数据结构--{【线性数据结构--顺序表,链表,栈,队列】,【树形数据结构--二叉树,图】}
//栈:先进后出,后进先出. 压栈--插入一个元素 出栈--删除一个元素


//#include<stdlib.h>
//int main()
//{
// int i = 0;
// for (i = 0; i < 100; i++)
// {
// printf("%d ", i);
// }
// system("pause");//系统命令-暂停
// return 0;
//}


//自己实现strcpy-字符串拷贝
//void my_strcpy(char* dest, char* src)//低级
//{
// while (*src != '\0')//拷贝前面字符
// {
// *dest = *src;
// src++;
// dest++;
// }
// *dest = *src;//拷贝\0
//}
//
//void my_strcpy(char* dest, char* src)//初级
//{
// while (*dest++ = *src++)//把src指向的字符串拷贝到dest指向的空间,包含\0字符.
// {
// ;
// }
//}
//
//void my_strcpy(char* dest, char* src)//中级
//{
// if (dest != NULL && src != NULL)//判断有效地址,无效不执行
// {
// while (*dest++ = *src++)
// {
// ;
// }
// }
//}
//
//#include<assert.h>
//void my_strcpy(char* dest, char* src)//高级
//{
// assert(dest != NULL);//断言--地址无效报错
// assert(src != NULL);//断言
// while (*dest++ = *src++)//把src指向的字符串拷贝到dest指向的空间,包含\0字符.
// {
// ;
// }
//}
//int main()
//{
// char arr1[] = "*********";
// char arr2[] = "hello";
// my_strcpy(arr1, arr2);
// printf("%s\n", arr1);
// return 0;
//}
//
//#include<assert.h>
//char* my_strcpy(char* dest,const char* src)//大神
// //const 放在指针变量的*左边时,修饰的是*p,也就是说:不能通过p来改变*p的值 const char* p
// //const 放在指针变量的*右边时,修饰的是指针变量p本身,p不能被改变了 char* const p
//{
// char* ret = dest;
// assert(dest != NULL);//断言--地址无效报错
// assert(src != NULL);//断言
// while (*dest++ = *src++)//把src指向的字符串拷贝到dest指向的空间,包含\0字符.
// {
// ;
// }
// return ret;
//}
//int main()
//{
// char arr1[] = "*********";
// char arr2[] = "hello";
// printf("%s\n", arr1);
// printf("%s\n", my_strcpy(arr1, arr2));
// return 0;
//}


//自己实现strlen-求字符串长度
//#include<assert.h>
//int my_strlen(const char* arr)
//{
// int count = 0;
// assert(arr != NULL);//保证指针的有效性
// while (*arr != '\0')
// {
// count++;
// arr++;
// }
// return count;
//}
//int main()
//{
// char arr[] = "abcdefg";
// int len = my_strlen(arr);
// printf("%d\n", len);
// return 0;
//}

举报

相关推荐

0 条评论