c 语言 初见学习

241 阅读3分钟

1.引入标准库

#include <stdio.h>

函数的入口和返回值

int main ()
{

    Printf(“hello”);

    return 0;

}

1byte = 8 Bit

1kb = 1024 byte

1mb = 1024 kb

1gb = 1024 mb

1tb = 1024 gb

2. 数据类型

int char double long longlong float short

sizeof() 返回数据类型的字节。

常量

const int a = 100; 本质上还是变量,只是被const修饰下,变为常属性
# define Max 10000 常量标识 不能修改

枚举

枚举类型是常量
enum Sex

{

    MALE,

    SEX,

    SECRET

};

3. 字符串

单引号'a' 是一个字符串,双引号 "abcd" 是一串字符串。

字符串最后的结尾是 \0. !非常重要

Strlen()求字符串长度 但是需要在头部写入 # include <string.h>

char arr1[] = { 'a','b','c'};不给末尾加 \0 Strlen打印为随机值,

char arr1[] = { 'a','b','c',’\0’};打印正确数量 3.
也就是必须加入 \0 字符串结束符,但是不算符号内容求字符串长度时不计算进去。

4. 数组的学习

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

**int intArr[10] = {1,2,3,4,5,6,7,8,9,10};** **完全初始化******

**Char[5] = {‘a’,’b’,’c’};** **不完全初始化,剩余的填充** **0**

    int arr[10] = { 1,2,3,4,5 };
    int i = 0;
    while (i <= 4)
    {
        printf("%d \n",arr[i]);
        i++;
   }

5. 操作符

算数操作符 + - * /

Float I = 9 / 2.0;

注意除号两端有一个是小数就是小数除法,如果都是整数就是整数除法,不会得到小数。

移位操作符 移动的是二进制 >> <<

位操作符 & | ^

赋值操作符 = += -= *= /= &= ^= |= >>= <<=

单目操作符

Sizeof 是个操作符 不是函数

!逻辑反操作 

( - 负值 ) ( + 正值 ) 

& 取地址 

( * 间接访问操作符(解引用操作符))

sizeof操作数的类型长度(以字节为单位)

~ 对一个数的二进制按位取反 

-- 前置 后置 --   ++ 前置 后置++

(类型)强制类型转换。例 int a = (int)3.14;

int arr[10] = { 0 };

printf("%d", sizeof(arr)); 这里计算的数组的总大小 单位是 byte .一个int 4个byte.

整数在内存中存储的是补码。

一个整数的二进制表示有三种:原码 反码 补码

负数计算: -1

10000000 00000000 00000000 00000001(原码)

11111111 11111111 11111111 11111110(反码)

11111111 11111111 11111111 11111111(补码)

正整数 原码 反码 补码 相同。

关系操作符 > >= < <= != ==

逻辑操作符 && 逻辑与 || 逻辑或

条件操作符(三目操作符) Exp1 ?exp2 :exp3

逗号表达式:逗号隔开的一串表达式。

    int a = 10;

    int b = 10;

    int c = 6;

    int d = 9;

    int sum = (a + b, c + d);

    printf("%d", sum);

逗号表达式是从左向右依次计算的,最后得到的是最后一个表达式的结果.

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

【】 () . ->

6. 常见关键字

Define 不是关键字 预处理指令

Include不是关键字 预处理指令 changjianguanjianzi.png

7. 定义常量和宏

Define 是预处理指令

1.  Define 定义符号 # define MAX 1000

2.  Define 定义宏  宏是有参数的 但它不是一个整体 ,如果写成一个整体是((x)+(y))

# define ADD(x,y) x+y

7. 指针

指针就是地址

内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的。

一个内存单元是一个byte然后分配地址

int a = 10; int 占4个 byte

每个字节都会分配地址但是 &a 取地址符号只会拿出他的第一个地址。

%p 专门用来打印地址

    int a = 10;

    int * pa = &a;// 说明pa是指针变量 int 说明pa 执行的对象是 int 类型

    *pa = 20; // * 解引用操作 *pa 就是通过pa里面的地址,找到a

   printf("%d", a);// 20

指针变量的大小

    printf("%d \n", sizeof(char*));

    printf("%d \n", sizeof(int*));

    printf("%d \n", sizeof(short*));

    printf("%d \n", sizeof(long*));

   printf("%d \n", sizeof(long long*));

指针大小是相同的!为什么?

指针是用来存储地址的! 指针需要多大空间,取决与地址的存储需要多大空间。

32位 32bit – 4byte

64位 64bit – 8byte

8. 结构体

结构体可以让c语言创建新的类型。

struct Sua
    {

        char name[20];

        int age;

        char sex[10];
    };

    struct Sua s = { "张三",20 ,"男"};

    printf("1: %s %d %s \n", s.name, s.age,s.sex);//1 张三 20 男

    struct Sua* pa = &s; // 取地址 struct 类型

    printf("2: %s %d %s \n", (*pa).name, (*pa).age, (*pa).sex);//2 张三 20 男

   printf("3 : %s %d %s \n", pa->name, pa->age, pa->sex);//3 张三 20 男