C语言初识

 
C语言基本知识
 
一、数据类型
char——字符型  1个字节 
short——短整型  2个字节
int ——整型   4个字节
long——长整型  4个字节
long long——双长整型  8个字节
float——浮点型  4个字节
double——双精度浮点型  8个字节
 
#include<stdio.h>
int main()
{
    printf("%d\n",sizeof(char));
    printf("%d\n",sizeof(short));
    printf("%d\n",sizeof(int));
    printf("%d\n",sizeof(long));
    printf("%d\n",sizeof(long long));
    printf("%d\n",sizeof(float));
    printf("%d\n",sizeof(double));
    return 0;
}
 
二、计算机中的单位
计算机是一个硬件,必须要通电,带有正负电(1、0);
bit(比特位):存放 二进制(1  0)
byte(字节) :1byte=8bit
kb :1kb=1024byte 
mb gb tb  pb:1024
三、常量:
1、字面常量
2、const修饰的常变量
3、#define定义的标识符常量
4、枚举常量
eg.2 
 #define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    const int n[5] = { 0 };
    printf("%d\n", n);
    n = 10;
    printf("%d\n", n);
    return 0;
}

 

就会报错,说:表达式必须是可以修改的左值
eg.3
 #define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define MAX 10
int main()
{
    int arr[MAX] = { 0 };
    printf("%d\n",MAX);
    return 0;
}

 

 
 
eg.4
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
enum Sex
{
    MALE,
    FEMALE,
    SECRET
};
int main()
{
    printf("%d\n",MALE);    //0
    printf("%d\n", FEMALE);//1
    printf("%d\n", SECRET);//2
    return 0;

 

}  
三、字符串+数组+转义字符+注释
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    char arr[] = { 'a', 'b', 'c' };
    char arr1[] = "abc";
    printf("%s\n",arr);
    printf("%s\n", arr1);
    return 0;
    
}

 

 
 
字符串:由双引导引起来的的一串字符;
字符串的结束标志是一个‘\0’转义字符,在计算字符串长度的时候\0是结束标志,不算作字符串的内容,其实'\0'为ASCII码值为0.
 #define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    char arr[] = { 'a', 'b', 'c' };
    char arr1[] = "abc";
    printf("%d\n", strlen(arr));
    printf("%d\n", strlen(arr1));
    return 0;
}

 

 
其中第一个输出为随机值,第二个为3
数组
数组都是从0开始的
#include<stdio.h>
int main()
{
    int a = 2;
    int arr[] = { 1, 2, 3, 4, 5, 6 };//6*4=24
    printf("%d\n",sizeof(a));//4
    printf("%d\n", sizeof(int));//4
    printf("%d\n", sizeof a);//4
    printf("%d\n",sizeof arr);//计算数组大小,单位字节
    return 0;
}
 
转义字符
 
转义字符
释义
ASCII
\'
表示字符常量'
039
\0
空字符NULL
000
\"
用于表示字符串内部的双引号
034
\\
用于表示一个反斜杠,防止被解释为一个转义序列符
092
\a
警告字符,蜂鸣
007
\b
退格符
008
\f
进纸符
012
\n
换行
010
\t
水平制表符
009
\r
回车
013
\v
垂直制表符
011
\ddd
1到3位八进制数所代表的任意字符
三位八进制
\xhh
1到2位十六进制所代表的任意字符
二位十六进制
常用的转义字符 \a  \b  \t  \f  \n  \v  \'  \\  \"
 #include<stdio.h>
#include<string.h>
int main()
{
    //\32——是两个8进制数字
    //32作为八进制代表的那个十进制的数字,作为ASCII码值,对应的字符
    // 32转换为十进制26——>(3*8^1+2*8^0=26)作为ASCII码
    printf("%d\n",strlen("C:\test\32\test.c"));
    return 0;
}

 

 
最后输出13
 
注释
C语言的注释风格 /*……*/
缺陷:不能嵌套
C++注释风格//……
可以注释一行或多行
四、操作符
算数操作符:+ - *  /  %
移位操作符:>>   <<
位操作符:&(按位与同1为1)  ^(按位异或10为1)  |(按位或有1为1)
赋值操作符:=  +=  -=  /= *=  %=  &=   ^=   |=    >>=   <<=
单目操作符:
! 逻辑反操作 
 - 负值 
+正值
&取地址
sizeof操作数的类型常数(以字节为单位)
#include<stdio.h>
int main()
{
    int a = 10;
    printf("%d\n",sizeof(a));
    printf("%d\n", sizeof(int));
    printf("%d\n", sizeof a);
    return 0;
}
会发现输出值都是10
eg2、计算元素个数
#include<stdio.h>
int main()
{
    int arr[10] = { 0 };
    int num = 0;
    num=sizeof(arr) / sizeof(arr[5]);
    printf("%d\n", num);
    return 0;
}

 

 
~对一个数的二进制位进行取反
#include<stdio.h>
int main()
{
    int a = 0;//4个字节,32个比特位
    int b = ~a;//b是有符号的整型
    //按(二进制位)位取反
    //00000000000000000000000000000000
    //11111111111111111111111111111111
    //原码、反码、补码——原码变反码符号位不变其他位取反,反码+1得到补码
    //负数在内存中存储,是按二进制的补码
    printf("%d\n",b);//打印的是这个数的原码
    return 0;
}

 

 
++前置,--后置
#include<stdio.h>
int main()
{
    int a = 10;
    //后置++先使用,再++
    int b = a++;//先让b=10,再给a++即a=11;
    //前置++先++,再使用
    int c = ++a;//先让a++即a=12,再c=a=12
    printf("a=%d\n b=%d\n c=%d\n", a, b,c);
    return 0;
}

 

 
*间接访问操作符(解引用操作符)
(类型)强制类型转换
#include<stdio.h>
int main()
{
    int a = (int)3.14;
    printf("%d\n", a);
    return 0;
}

 

原本3.14不能赋给int型,使用强制类型转换就可以。
 
 
关系类型操作符
>
>=
<
<=
!=(用于测试“不相等”)
==(用于测试“相等”)
逻辑操作符
&&逻辑与
||逻辑或
#include<stdio.h>
int main()
{
    //只判断真假,0为假,非零为真
    int a = 3;
    int b = 0;
    int c= a&&b;
    int d = a || b;
    printf("%d\n", c);
    printf("%d\n", d);
    return 0;
}

 

 
条件操作符
exp1?exp2:exp3;
表达式若为真,执行表达式2;若为假,执行表达式3。
#include<stdio.h>
int main()
{
    int a = 20;
    int b = 15;
    int max = 0;
    max=(a > b ? a : b);
    printf("max=%d\n", max);
         return 0;
}

 

 
逗号表达式
exp1,exp2,exp3,……,expn
下标引用操作符、 函数调用操作符、 结构成员
[]、()、.、->
五、常见关键字
auto  break   case   char const continue   default   de   double  else   enum   extern   float   for   goto    if   int   long   register   return   short   signed   sizeof    static   struct   switch  typedef   union   unsigned   void   volatile     while
static:修饰局部变量时,局部变量的生命周期变长。
#include<stdio.h>
void test()
{
    int a = 1;
    a++;
    printf("a=%d\n", a);
}
int main()
{
    int i = 0;
    while (i < 5)
    {
         test();
         i++;
    }
    return 0;
}

 

 
#include<stdio.h>
void test()
{
    static int a = 1;
    a++;
    printf("a=%d\n", a);
}
int main()
{
    int i = 0;
    while (i < 5)
    {
         test();
         i++;
    }
    return 0;
}

 

 
static修饰全局变量
文件1中建立全局变量
int g_val = 2021;

 

文件2如下
#include<stdio.h>
//static修饰全局变量
//改变了全局变量的作用域,使静态的全局变量只能在源文件内部使用,出了源文件就没法使用
int main()
{
    extern int g_val;
    printf("g_val=%d\n",g_val);
    return 0;
}

 

 
文件1中变为
static int g_val = 2021 ;
 
#define定义常量和宏
#include<stdio.h>
#define MAX(X,Y) (X>Y?X:Y)
int main()
{
    int a = 20;
    int b = 30;
    int max = MAX(a, b);
    printf("max=%d\n", max);
    return 0;
}

 

 
指针
内存
内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
#include<stdio.h>
int main()
{
    int a = 10;
    //有一种变量是用来存放地址的指针变量
    int* p = &a;
    printf("%p\n", p);
    printf("%p\n", &a);
    //解引用操作符
    *p = 20;
    printf("%d\n", a);
    return 0;
}

 

 
 
结构体
#include<stdio.h>
struct Book
{
    char name[20];
    int price;
};
int main()
{
    //利用结构体类型-创建一个该类型的结构体变量
    struct Book b1 = {"老人与海",35};
    struct Book* pb=&b1;
    //利用pb打印出书名和价格
    //.  结构体变量.成员
    //->  结构体指针->成员
    printf("书名:%s\n",pb->name);
    printf("价格:%d元\n", pb->price);
    /*printf("书名:%s\n",(*pb).name );
     printf("价格:%d元\n", (*pb).price);*/
    /*printf("书名:%s\n",b1.name);
     printf("价格:%d元\n",b1.price);*/
    return 0;
}

 

 
字符串拷贝
#include<stdio.h>
#include<string.h>
struct Book
{
    char name[20];
};
int main()
{
    struct Book b1 = {"C语言课程设计"};
//字符串拷贝,库函数string.h
    strcpy(b1.name,"C++");
    printf("书名:%s\n",b1.name);
    return 0;
}

 

 
 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值