C语言基础&&杂项

初识C 语言以及拓展:       

  • #include <stdio.h>//保含一个stdio.h(标准输入输出函数)的文件

int main() //主函数-程序的入口-main函数有且只有一个

{

     printf(“hello world\n”);

return 0;

}   

  • int代表整型的意思,main前面的int表示main函数调用返回一个整数值,上述程序就是返回一个整数值0.  
  • 数据类型的大小(以字节为基本单位):

  • 计算机的中的单位及转换:

bit-比特位(最小单位)

byte-字节(一个字节相当于八个比特位)

kb(相当于1024个字节)

mb(相当于1024个kb)

gb(相当于1024个mb)

tb(相当于1024个tb)

pb(相当于1024个pb)

  • 变量、常量:生活中的有些值是不变的(比如:圆周率,性别(?),身份证号,血型等),有些值是可变的(比如:年龄,体重,薪资)。不变的值,C语言中常量的概念来表示,变得值用变量来表示。(注意C语言定义变量时要定义在当前代码块的前面)
  • 局部与全局变量:

部分代码:

    int  a=20;//全局变量-定义在代码块({})之外的变量

int  main()

{

  int  a=10;//局部变量-定义在代码块({})之内的变量

  return  0;

}

这里的运行结果是:10

  • 拓:局部变量与全局变量可以同时存在,且当局部变量与全局变量的名字相同的情况下,局部变量优先。(局部变量与全局变量的名字不要相同,容易产生bug)
  • 拓;如果此时代码这样写,则会报错,原因是未声明变量a,a的作用范围只在它的{}代码块内,之外不能使用。
int  main()

{

  {

int  a=10;//局部变量-定义在代码块({})之内的变量

      }

  return  0;

}
  • 变量的作用域和生命周期:

作用域:变量哪里可以用哪里就是它的作用域。局部变量的作用域就是所在代码块内,全局变量的作用域是整个工程,任何地方都可以用。

生命周期:

局部变量的生命周期:进入作用域生命周期的开始,出作用域生命周期结束。

全局变量的生命周期:整个程序的生命周期。

  • #define _CRP_SECURE_NO_WARNINGS 1 把这一串代码放在程序源文件的第一行可以防止使用scanf函数时产生警告。

学会用Notepad++更改VC的属性,在源文件的第一行默认加上上述代码。

  • 常量:C语言中的常量分为以下几种:
  1. 字面常量(直接的值)
  2. const修饰的常变量(const指的是常属性)
  3. #define定义的标识常量
  4. 枚举常量

拓:const常属性的应用:

注意常变量与常量的区别。

  • 枚举关键--enum

拓:这里的man,woman,secret为枚举常量,且这些东西是有值不可改变的。

举例:

这里的man的值无法改变。

  • 字符串+转义字符+注释
  1. 字符串:”hello bit\n”这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。(注意:字符串的结束标志是\0的转义字符。在计算字符串长度的时候\0是结束标志,不算做字符串的内容,详细见下面的图片计算arr1时长度为3)

拓:strlen--string length(用于计算字符串长度的),在应用前要先有#include  <string.h>z这个头文件才能使用。

这里计算两个数组中字符串的长度不一样,原因是arr2数组里没有“\0”,导致函数一直计算直到遇到\0才停止计算,所以结果是42也可以称作随机值。若此时将arr2【】数组中加一个0,则输出结果则为两个三。

注:这里的波浪号报的警告查阅相关资料发现是strlen函数返回一个值的时候返回的是一个64位(8byte)的整型,而int(%d)只返回4byte(32位),所以不对,占位符错误。详细

资料如下:

  1. 转义字符:

\?    在书写连续多个问号时使用,防止他们被解析成三字母词。

\’     用于表示字符常量’

\”     用于表示一个字符串内部的双引号

\\     用于表示一个反斜杠,防止它被解释成一个转义序列符。(转义的转义就是正常可以理解为负负得正)

\a     警告字符,蜂鸣。

\b     退格符

\f     进纸符

\n     换行

\r     回车

\t     水平制表符

\v     垂直制表符

\ddd   ddd表示1-3个八进制的数字。如:\130X

\xdd   dd表示2个十六进制数字。如:\X300      

  1. 注释:有两种风格
  1. C语言风格的注释/*xxxxx*/

缺陷:不能嵌套注释

  1. C++风格的注释//xxxxxxxx

可以注释一行也可以注释多行

  • 引用类型的使用:引用的意思是它给一个对象提供一个替代的名字。

这里引用j来替代i的名字,换汤不换药,当你动i的值的时候,j的值也会改变,因为j是换了名字的i。

#include <stdio.h>

void main()

{

int i = 5;

int& j = i;

printf("%d,%d\n", i, j);

i = 10;

printf("%d,%d\n", i, j);

}

  

拓:引用类型作为形参的三点说明。

  1. 传递引用给函数与传递指针的效果是一样的,形参变化实参也反生变化
  2. 引用类型作为形参,在内存中并没有产生实参的副本,它直接对实参操作;而一般变量作参数,形参与实参就占用不同的存储单元,所以形参变量的值是实参变量的副本。因此,当参数传递的数据量较大时,用引用比用一般变量传递参数的时间和空间效率都好。
  3. 指针参数虽然也能达到与使用引用的效果,但在被调函数中需要重复使用“*指针变量名”的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。
  • 拓:关键字cout,cin的语法使用:

Cout:具体操作--  cout<<想要输入的内容(在使用cout时必须包含<iostream>的头文件,且这里的<<是流插入运算符),而cin:cin>>想要输出的内容,一个是输入一个是输出,并且两者均可以自动识别类型(字符型、整型等)

  • 分配内存空间函数malloc(),调用形式为:

类型说明符 *p=(类型说明符*)malloc(size)

程序向系统“打报告”需要大小为size字节的储存空间。在系统内存充足的情况下,会返回所分配空间的起始地址。这个时候需要定义一个指针变量将这个地址保存下来,以便后面使用。程序通过强制转换指明这个空间用来储存什么类型的空间。

  • 学会了使用Gitee来储存自己写的代码

  • 学习了结构体指针:
typedef struct

{

char no[20];//图书书号

char name[50];//图书书名

float price;//图书价格

}Book;

typedef struct//创建一个顺序表

{

Book* elem;//存储空间的基地址

int length;//记录图书表中当前的实际图书个数

}Sqlist;//图书表的顺序存储结构类型为Sqlist

Status Initlist(Sqlist&L)

{//构造一个空的顺序空表

L.elem = new Book[MAXSIZE];//为为顺序表分配一个大小为MAXSIZE的数组空间

if (!L.elem) exit(OVERFLOW);//存储分配失败退出

L.length = 0;//空表长度为0

return OK;



}

这里的Book*elem指针的意思是指向L这个结构体数组的基地址的Book类型指针与L.elem意思相同。根据以上的伪代码可以得到一个理论图。

注:L.elem[i]指的是所对应的Book型结构体,而L.elem+i则指的是所对应的Book结构体的地址,要想用Book里面的东西则必须是L.elem[i].no或(*(L.elem+i)).no。(要注意这里的运算优先级“.”的优先级是高于“*”,所以在不加()的情况下系统会优先识别“.”,如果不注意会发生一些错误

  • 拓:结构体与结构体之间比不了大小,原因在于,结构体中有那么多的变量,如果拿整体比较系统不知道要比较哪个,所以不行。(但如果真的想比较那就比较结构体里的变量)例如
#include <stdlib.h>

#include <stdio.h>

struct A

{

int a;

int b;

};

int main()

{

A x = { 1,0 };

A y = { 5,4 };

x == y;

}

判断两个结果体变量相等的条件是x.a==y.a&&x.b==y.b,y以上问题都是从数据结构顺序表与链表的学习过程中产生的问题,然后进行相关资料的查阅以及学长学姐的指导得以解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值