目录
编译环境
编译环境:VS2019
运行结果
test8.c
#include <stdio.h>
#include <assert.h>
//struct Stu
//{
// char name[20];
// short age;
// char tele[12];
// char sex[5];
//}s1, s2, s3;
typedef struct Stu
{
char name[20];
short age;
char tele[12];
char sex[5];
}Stu2;
//struct Stu
//{
// char name[20];
// short age;
// char tele[12];
// char sex[5];
//}s2;
struct S
{
int a;
char c;
char arr[20];
double d;
};
void print1(struct S s3)
{
printf("%d\n",s3.a);
printf("%c\n", s3.c);
printf("%s\n", s3.arr);
printf("%lf\n", s3.d);
};
void print2(struct S* s3)
{
printf("%d\n", s3->a);
printf("%c\n", s3->c);
printf("%s\n", s3->arr);
printf("%lf\n", s3->d);
};
struct T
{
char arr[10];
struct S s;
char* pc;
};
void my_strcpy(char* dest, const char* src)//这个const的存在使得src的值不可更改
//防止*dest++ = *src++这一句你写反了
{
char* dest;
char* src;
//while (*src != '\0')
//{
// *dest = *src;
// dest++;
// src++;
//}
//*dest = *src;
//while (*dest++ = *src++)//这个是优化之后的,妙妙妙,但是可读性差
//{
// ;
//}
if (dest != NULL && src != NULL)//再次优化之后的
{
assert(dest != NULL);//断言,会提示出错位置
assert(src != NULL);
while (*dest++ = *src++)//这个是优化之后的,妙妙妙,但是可读性差
{
;
}
}
}
int main()
{
//struct Stu s1;
Stu s2;//这两行语句都正确
//struct Stu s1 = {"张三",22,"123456","man"};
//Stu2 s2 = { "张三",22,"123456","man" };//error
char arr[] = {"hehe"};
struct T t = { "haha",{1,'c',"arr",1.23 },arr };
//struct T t = { "haha",{},arr };
printf("%s\n",t.arr);
printf("%c\n", t.s.c);
printf("%s\n", t.s.arr);
struct S s2 = {1,'c',"arr",2.34};
//struct S* s3 = { 1,'c',"arr",2.34 };//error
print1(s2);//这种首先将s2赋给s3(涉及到压栈),再从s3里面取,一来多占用空间,二来速度也慢
print2(&s2);//这种方法直接从s2里面取,省空间,而且速度快
//程序代码=栈+堆+静态区
//栈=函数开辟空间,局部变量,等等
//堆=动态分配,等等
//静态区=静态变量,全局变量,等等
//数据结构=线性数据结构+树形数据结构
//顺序表=顾名思义
//链表=顾名思义
//栈=先进后出=压栈出栈//出栈==删除数据
//队列=没讲
//以上四个是线性数据结构
char arr2[] = { "#######" };
char arr3[] = {"bit"};
my_strcpy(arr2, arr3);
printf("%s\n", arr2);
const int num = 10;//这里num不可更改
//int* p = #//如果是这一句,则p更改了nun的数值,违背规则
const int* p = #//修饰*p,*p不可更改,加上const是为了不违背num的规则,使得p不可更改num的数值
//int* const p = #//修饰p,p不可更改
//*p = 20;//但是这却打印出了20,违背规则
printf("%d\n",num);
return 0;
}