C语言入门——初识C语言

目录

一、数据类型

二、变量、常量

1、定义变量的方法

2、变量的分类

3、常量

(1)字面常量

(2)const修饰的常变量

(3)#define定义的标识符变量

(4)枚举常量

三、字符串、转义字符、注释

1、字符串

2、转义字符

3、注释

四、选择语句

五、循环语句

六、函数

七、数组

八、操作符

算术运算符

移位运算符

位操作符

赋值操作符

单目操作符

关系操作符

逻辑操作符

条件操作符(三目操作符)

逗号操作符

下标引用、函数调用和结构成员

九、常见关键字

 1、typedef关键字

 2、关键字static

十、define定义常量和宏

1、define定义符号

2、define定义宏

十一、指针

十二、结构体


因为以后工作关系,要接触C语言,想再系统的学习一下。我看的是B站鹏哥的课《C语言从入门到精通》,讲的真的很细致,非常适合没接触过任何语言的初学者学习,让人第一次接触不至于那么懵。准备用这个专栏记录一下学习笔记,第一节鹏哥大致介绍了学习C语言入门所有要学习的东西。

一、数据类型

 数据类型是用来创建变量的

类型描述占空间大小(字节)
char字符数据类型1
short短整型2
int整型4
long长整型4
long long更长的整型8
float单精度浮点数4
double双精度浮点数8

 补充:

●%d:打印一个整型

printf("%d",age)
printf("avg=%d\n",avg)

●%f:打印一个float型浮点数

●%lf:打印一个double型浮点数

printf("%lf",weight)

●%s:打印一个字符串

printf("%s",arr1)

 ●%p:打印一个地址

●\n:换行

●sizeof():关键字/操作符,用来计算类型或变量所占空间的大小,单位为字节

●1个bit(比特)位存放一个二进制位

●一个byte(字节)=8个比特位

●1kb=1024byte

●1mb=1024kb

●1gb=1024mb

二、变量、常量

1、定义变量的方法

字符型:char ch='a';

整型:int age=10;

短整型:short num=10;

单精度浮点型:float weight=50.5;

2、变量的分类

分类区分作用域生命周期
全局变量{}内部定义的整个工程整个程序的生命周期
局部变量{}外部定义的变量所在局部范围

进入作用域生命周期开始,

出作用域生命周期开始

 变量的生命周期:指的是变量的创建到变量的销毁之间的一个时间段

当局部变量和全局变量名字冲突时,局部变量优先。并且不建议把局部变量和全局变量的名字设置成一样。

补充:

scanf()函数:用于取用户的输入

如:

scanf("%d %d",&a,&b)  //报错

解决办法:

(1)在源文件第一行加上:#define _CRT_SECURE_NO_WARNINGS 1

(2)在Data(D:)>Program Files(x86)>Microsoft Visual Studio 12.0>VC>vcprojectitems>newc++file.cpp文件里将#define _CRT_SECURE_NO_WARNINGS 1编辑进去,以后的编写都会自动在源文件第一行加上这句话就不会报错了

3、常量

(1)字面常量

例:

int main()
{
  3.14;
  10;
  'a';
  "rjreb";
}
//没啥意义

(2)const修饰的常变量

const修饰的常变量,具有常属性(即不能被改变的属性),本质上还是变量。

 例:

const int n=10;
int arr[n]={0};  //报错

(3)#define定义的标识符变量

#define定义的标识符变量不可修改,语法实例:#define MAX=1000

(4)枚举常量

枚举常量即可以一一列举的常量。

例:

enum Sex
{
  MALE,
  FEMALE,
  SECRET
}
int main()
{
  enum Sex s=MALE;
  return 0;
}

//还可以给枚举常量赋初值
enum Sex
{
  MALE=3,
  FEMALE,
  SECRET
}
int main()
{
  enum Sex s=MALE;  //此时MALE等于3
  return 0;
}

三、字符串、转义字符、注释

1、字符串

"hello bit.\n"

这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。字符串的结束标志是一个\0的转义字符,不算做字符串的内容。

\0是结束标志的验证方法:

(1)在【监视】中查看内存情况

(2)打印字符串

char arr1[]="abc";
char arr2[]={'a','b','c'};
printf("%s\n",arr1);  //abc
printf("%s\n",arr2);  //abcewkghwiuefbj

(3)求字符串长度

char arr1[]="abc";
char arr2[]={'a','b','c'}
printf("%d\n",strlen(arr1));  //3
printf("%d\n",strlen(arr2));  //15

2、转义字符

引例:假如我们要在屏幕上打印一个目录:c:\code\test.c

#include<stdio.h>
int main()
{
    printf("c:\code\test.c\n");
    return 0;
}
//输出为c:      est      est.c

 因为计算机以为\t是转义字符

常见转义字符有:

转义字符释义
\?在书写连续多个问号时使用,防止它们被解析成三字母词
\.用于表示字符常量'
\"用于表示一个字符串内部的双引号
\\用于表示一个反斜杠,防止它被解释为一个转义序列符
\a警告字符,蜂鸣
\b退格符
\f进纸符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd表示1-3个八进制的数字。如:\130为130对应的ASCII码,即X。
\xddddd表示2个十六进制数字。如:\x30为0

3、注释

//是C++的注释符

/**/是C语言的注释符,不支持嵌套注释

四、选择语句

例:

#include<stdio.h>
int main()
{
    int coding=0;
    printf("你会努力学习吗?(选择1或0):");
    scanf("%d",&coding);
    if(coding==1)
    {
        printf("坚持,你会成功的!\n");
    }
    else
    {
        printf("放弃,回家放牛吧。\n");
    }
    return 0;
}

五、循环语句

循环语句有while、for、do...while...。

 例:

int main()
{
    int line=0;
    while(line<30000)
    {
        printf("写代码:%d\n",line);
        line++;
    }
    if(line==30000)
    {
        printf("好工作\n");
    }
    return 0;
}

六、函数

例:

#include<stdio.h>
int main()
{
    int num1=0;
    int num2=0;
    int sum=0;
    printf("输入两个操作数:>");
    scanf("%d%d",&a,&b);
    sum=num1+num2;
    printf("sum=%d\n",sum);
    return 0;
}
//可以将上述代码用函数实现,如下:
int Add(int x,int y)
{
    int num1=0;
    int num2=0;
    scanf("%d%d",&num1,&num2);
    int sum=Add(num1,num2);
    printf("%d\n",sum);
}

七、数组

数组:一组相同类型元素的集合

定义方法:int arr[10]={1,2,3,4,5,6,7,8,9};  //定义一个整型数组,最多放10个元素

访问方法:用数组下标来访问

补充:

char ch[5]={'a','b','c'};    //不完全初始化,剩余的默认为0。

八、操作符

算术运算符

+  -   *   /   %

移位运算符

>>   <<

位操作符

&按位与     |按位或      ^按位异或

赋值操作符

=     +=    -=     *=     /=     &=     ^=    |=    >>=    <<=

单目操作符

!逻辑操作符
-负值
+正值
&取地址
sizeof操作数的类型长度(单位为字节)
~对一个数的二进制按位取反
--前置、后置--
++前置、后置++
*间接访问操作符(解引用操作符)
(类型)强制类型转换

关系操作符

>   >=   <    <=     !=    == 

逻辑操作符

&&    ||

条件操作符(三目操作符)

exp1?exp2:exp3

逗号操作符

exp1,exp2,exp3,...,expN

逗号表达式从左向右计算,整个表达式的结果是最后一个表达式的结果

下标引用、函数调用和结构成员

[]     ()      .       ->

九、常见关键字

●C语言提供的,不能自己创建关键字

●关键字不能做变量名

●常见关键字:

auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、long、int、register、return、short、signed、sizeof、static、struct、switch、typedef、union、unsigned、void、volatile、while

●部分简单解释:

auto:是自动的,修饰局部变量,只是省略掉了

extern:用来声明外部符号

register:寄存器关键字,针对大量/频繁被使用的数据

static:静态的

union:联合体

volatile:C语言暂时不讲

●define、include:不是关键字,是预处理指令

 1、typedef关键字

用来类型重定义

typedef unsigned int u_int; //进行重定义
int main(){
    unsigned int num1=100;   //(1)
    u_int num2=100;          //(2)
}  

//(1)和(2)完全一致

 2、关键字static

用来修饰变量和函数:

●修饰局部变量->静态局部变量:改变生命周期,使变量不销毁。本质上改变了存储类型。

●修饰全局变量->静态全局变量:使得全局变量只能在自己所在源文件(.c)内部可以使用。本质上是因为全局变量具有外部链接属性,但是被static修饰后就变成了内部链接属性。

●修饰函数->静态函数:使得函数只能在自己所在源文件(.c)内部可以使用。本质上是因为函数具有外部链接属性,但是被static修饰后就变成了内部链接属性。

存储类型存放的内容
栈区局部变量、函数的参数
堆区用于动态内存分配
静态区全局变量、static修饰的静态变量

十、define定义常量和宏

define是一个预处理指令

1、define定义符号

2、define定义宏

例:

//例1
#define ADD(X,Y) X+Y
int main()
{
    printf("%d\n",ADD(2,3));  //输出5
    return 0;
}

//例2
#define ADD(X,Y) X+Y
int main()
{
    printf("%d\n",4*ADD(2,3));  //输出11,因为宏完成的是替换,这里实际为4*2+3
    return 0;
}

//例3
#define ADD(X,Y) ((X)+(Y))
int main()
{
    printf("%d\n",4*ADD(2,3));  //输出20
    return 0;
}

十一、指针

 指针就是地址

int a=10;
int* pa=&a;
*pa=20;    //此时a=20

&为取地址操作符, *说明pa是指针类型,int说明pa执行的对象是int类型的,用来存放a的地址

1、指针的大小

int main()
{
    printf("%d\n",sizeof(char*));     //4
    printf("%d\n",sizeof(short*));    //4
    printf("%d\n",sizeof(int*));      //4
    printf("%d\n",sizeof(long*));     //4
    printf("%d\n",sizeof(long long*));//4
    printf("%d\n",sizeof(float*));    //4
    printf("%d\n",sizeof(double*));   //4
}

结论:

指针大小在32位平台是4个字节,64位平台是8个字节。

十二、结构体

结构体使得C语言有能力描述复杂类型。比如描述学生,学生包含:名字+年龄+性别+学号这几项信息,这里只能用结构体来体现了。

//创建一个学生的类型
struct Stu
{
    char name[20];
    int age;
    char sex[5];
    char id[15];
}
//创建一个书的类型
struct Book
{
    char name[20];
    float price;
    char id[30];
}

int main()
{
    struct Stu s={"张三",20,"男","12"};            //结构体的创建和初始化
    printf("1:%s %d %s %s\n",s.name,s.age,s.sex,s.id);            //结构体变量.成员变量名
    struct Stu * ps=&s;
    printf("2:%s %d %s %s\n",(*ps).name,(*ps).age,(*ps).sex,(*ps).id);
    printf("3:%s %d %s %s\n",ps->name,ps->age,ps->sex,ps->id);    //结构体指针->成员变量名
    return 0; 
}

1、结构体的初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

趣多多代言人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值