目前是大一的学生,偶然间的想法,想提前学C语言,想尽快完成大学课程,利用哔哩哔哩看网课自学了几天,越发觉得有意思。
都说英语对于计算机类专业特别重要,但我英语基础真的太差了,什么都不会,主要还有抗拒心理,我决定把所有时间精力投入到专业课上,有必要用到英语时,我也比较有目的性的去学,现如今零零散散的背单词太难坚持了,目前的计划就是完成课内要求的前提下,多钻研专业课的内容,罗列一下这几天学到的东西:
1.先是学习了打印函数以及编程的格式
#include
int main()//计算机运行的入口
{
printf("打印内容\n");//若要打印中文,就直接打字到引号内;若要打印其他的变量要用%
//%d-打印整形(也就是数字那一类)
//%s-打印字符(也就是字母,汉字)
//%p-打印地址
//%f-打印小数
getchar();//等待指令,不知道为什么,我的哪怕子系统改成控制台了也没办法让小黑板停住,只能用这个了。
return 0;//结束指令
}//这是我第一个学到的,也是第一个打下的程序,嘿嘿
2.数据类型
int-整形(也就是数字)
char-字符(字母,汉字之类的)
short-比较短的数字可以用
long-比较长的数字可以用
long long-超级长的数字可以用
double-小数
用法主要我觉得有两种,一种给我感觉像是储存数据,一种是定义变量
例如:储存数据,int a=10//我的理解就是向系统申请个空间,名字叫a,用于存放10这个整形。
定义变量,int a=0;a可作为一个整形变量在程序中使用,不一定等于0,只是默认等于0,随时可以重新下定义改变
例如
{int main();
int a=0;
int b=0;
int y=0;
scanf("%d%d",&a,&b);//scanf我理解为输入数据,这里&是取地址,取了a和b的空间,scanf就是允许我向这两个空间去输入数据,或者说改变里面的“0”.说实话这个理解是我此刻突然理解的,哈哈哈,感觉更符合课本和逻辑了,突然悟了哈哈
y=a+b;//a+b的结果放到y的空间内
printf("%d",y);打印出y
getchar();等待指令
return 0;结束
}
关于变量还有要记住的:
a.局部变量优先被程序执行
b.C语言中变量要最先定义
3.然后就是学了scanf输入函数
scanf的格式是:
scanf("输入类型(例如:%d)",变量)
用法是目前熟悉的就是用来写加减乘除的程序
4.还学了常量(有四种)
a.字面常量
例如1,2,,3这样的
b.const修饰的常变量;
用法就是直接在变量定义前加const,对变量赋予常属性,但本质还是变量
c.#define定义的标识符常量
用法是#define 自定义名称 数据;
d.枚举常量
enum{a,b,c}大括号内的都为常量,可直接一口气定义多个常量
ps:这一块只是当作知识点记住,还不知道怎么用。
5.常见的一些代码
strlen-用于计算字符串有多少个字符的代码(单位:个)//它的使用需要引用#include
sizeof-用于计算变量和类型所占空间的代码(单位:字节)
const-用于赋予变量常属性
extern-用于声明引用外部符号,就是要用其他文件里面的定义时,要加这玩意,和系统说一声
a.引用符号 extern 定义名称
b.引用函数 extern 函数名称
tygister-用于改变类型名字的,就是遇到些特别长的类型名字,给他取个小名
例如:tygister double love;//此时就可以把love当作double用了
register-可在某代码前加个这个,建议系统给它放到寄存器里,会运行的特别快
static-有种将函数或者变量锁定住的感觉,学的时候就是说有三种作用,其中对于全局变量和函数的作用一样,就是锁住,或者说隐藏起来,不给外部引用,而对于局部变量则是延长其生命周期,我的理解就是还是把它锁住,不然其局部运行结束后数据丢失,可以将局部变量的结果保留(不知道对不对,现在用的不多,刚学)
6.选择语句(条件语句)
目前学会的有两种方式:
a.
if 自定义条件
运行方式1;
else (不符合自定义条件时)
运行方式2;
b.
(自定义条件?运行方式1:运行方式2);
熟练第二种会方便很多
7.自定义函数
函数运算结果类型 自定义名称(自定义变量1,自定义变量2)
{
自定义函数运行法则;
return 结果
}
例如,我想自定义一种加法函数
int add(int x,int y)
{
int sum=0;//sum是随意起的名字,这里定义一个变量来接收结果
sum=x+y;//自定义法则
return sum;
}
这种自定义函数的方法,熟练掌握原理可以去常识各种创新玩法,感觉挺重要的
8.循环语句while
while-循环代码
用法:
while(自定义条件)//若符合条件,则执行大括号内的程序,若不符合则跳过
{自定义代码,这里输入想循环的程序
}//执行完以后,会自动带着结果返回到最开始
例如:
int main()
{int a=0;
while(a<100)//一般用条件决定你想循环执行的次数,这里100,或者说条件是自己决定的
{
printf("%d",a);//这里选择你想执行的程序,目前我只会用于打印,还有其他玩法还没研究哈哈
a++;//这里的a++会让你的a每次执行完后数字加一,然后返回到最开始,所以利用这个可以限定你想循环的次数,若没有a++则返回数字不变,将一直a<100,那会一直循环下去。
}
return 0;
}
目前只试过重复执行打印,但直觉告诉我,这个很重要,肯定有大用处。
9.指针*(重不重要不知道,反正我最近学的嘛,哈哈哈)
指针的概念通过网课老师讲解,理解的蛮透彻的哈哈,现在来整理一下
正常来说每个字符或者整形都有一一对应的地址用于寄存在计算机里
例如:int a=10;就是申请四个字节的空间,空间名字叫a,10被存放在那,其中每个空间都有自己对应的地址,这个又可以和电脑有多少根...什么线来着有关,每个线可以输入0或1,也就是正电或者负电,一般系统都是32根或者64的,这对应的就是32个二进制的权位,也就是有二的32次方个单位的字节(大概就5G好像是)的内存,这些内存就是前面说的存放数据的空间,每一个都有对应的地址,一般打印出来的地址都是16进制的,嗯...总而言之原理我是懂了,那位老师很好哈哈哈,但是我描述有点困难,让我画图我还是有信心能说明白的
总之,就是每个你定义的东西都会有专门的空间去存放,每个空间申请后会有对应的地址
*就是用于存放或者定位地址的
例如:
int a=10;这里建立个空间a存放10,假如地址为123(当然不可能是123,方便理解嘛)
int* p=&a;这里的int*是*的用法之一,存放地址,在对应类型后面加*表示你要定义一个专门储存地址的变量,p是你随意取得名字,&取地址符号千万别忘,这里整句意思就是:我设立了一个p用来专门存放a的地址,此时p就等于a这个空间的地址
*还有一个用法就是用来定位地址
例如:连续上面的,p可以代指a的地址,则
*p的意思呢就是定位到a的空间去,a的空间里放着10;也就相当于*p=10:
当然你也可以定位到以后对那一块空间进行改变
比如,*p=20;这个时候a空间里面的数据就被你改成20了,此时a=20
还有一个结论:32根线的地址都是4字节,64根的都是8字节,理解原理以后就真的为啥了
10.结构体struct(今天刚学,懵懵懂懂的感觉)
我先把老师课堂演示的代码打出来:
老师说这个用处是用多个不同类型数据定义复杂事务,举的例子是书,用一本书的书名和价格来锁定一本书,我理解的话就是:
struct book//对书下定义
{//这里只用价格和书名
char name[20];//char是类型 加书名
short price;//price是价格的意思,其实名字可以自定义的,short更重要,表示类型
}; //这里的;号绝对不能忘
上面格式定义完成,接下来可以用上面的格式去下定义
int main()
{
struct book b1={"c语言程序设计",55};//这里将第一本书叫b1,其书名叫C语言程序设计,价格55
printf("书名:%s\n",b1.name);打印时要注意格式,b1.成员
printf("价格:%d\n",b1.price);
return 0;
}
说实话,我自己整理这个的时候总有种莫名其妙的感觉,感觉老师的比喻和用法,不像是根本性的东西,有种很大的不适感,上面也描述的特别乱,于是我常识用更根本的方式去解读,用计算机的思维去解读,因为我们目的不是定义书或者什么,而且活用struct
我认为:struct的用处用我的话来说,是向自定义一种空间使用方式,或者说储存方式
例如:struct love // 这里我建立了一个名字为love的储存方式
{ char a; //储存规则我定义为两个整形和一个字符为一组,并且为之取名为a,b,c
int b;
int c;
};
接下来我就可以使用我自己定义的方式去一组组的储存我想要放在一起的数据
例如:
three=“张三,12,100” four=“李四,13,98”
struct love three=("张三",12,100);// 这里我把第一组储存起来,取名three,
struct love four=(“李四”,13,98);//第二组取为four,括号内对于的位置就是上面定义的abc
也就是说此刻 three.a=张三;three.b=12;four.c= 98
按这种方式理解了下,感觉更想计算机语言了,接下来回去多打几遍估计就能熟悉了。
10.指针应用于结构体
理解指针和结构体以后,这个不难理解
我先写个代码:
struct love
{int a;
char b;
};
int main();
struct love chk={666,"nb"};
//到这一步都是结构体的内容,这里我申请了一个名为chk的空间,用来储存666和nb这组数据
//因此,也就是说chk也对应着一个地址,该地址也可以被储存。方式如下
struct love* qsq=&chk
//这里的意思就是,因为要申请一个同一类型的空间,所以用struct love,*表示这个空间专门用于储存地址,该空间名字为qsq,也就是说qsq=chk的地址
//当我想用qsq去定位到chk的空间时,也是用*,有两种方式
第一种,(*qsq).成员,例如(*qsq).a=666;(*qsq).b=nb
这里的*qsq就是定位到chk空间,为了表示整体性,加括号
第二种,qsq->成员,例如qsq->a=666;qsq->b=nb
这是直接从地址锁定到空间,这两个重点记忆一下,就没多大问题了
11.剩下一些零零散散的知识点,学精了再整理吧