C/C++基础知识

博客 动态
0 172
羽尘
羽尘 2022-05-06 20:58:53
悬赏:0 积分 收藏

C/C++基础知识

1、数据类型

1、1变量

? 数据的容器,数据变容器不变

int a = 1;

1、2 基本类型

1、2、1 基本类型介绍

整型:int

字符型:char

float 单精度浮点型

double 双精度浮点型

#include<stdio.h>int main(){	//sizeof 求所占字节数	printf("%d\n",sizeof(int));	printf("%d\n",sizeof(char));	printf("%d\n",sizeof(float));	printf("%d\n",sizeof(double));	return 0;}输出:    4    1    4    8

1、2、2 限定符

short int : 使得 int 变短 (4 ---> 2)

long int :使得 int 变长 (4---> 8)

#include<stdio.h>int main(){		short int a = 1 ;	long int b = 2;	printf("%d\n",sizeof(a));	printf("%d\n",sizeof(b));    printf("%d\n",a);	printf("%d\n",b);	return 0;}输出:    2    8    1    2

signed 有符号

unsigned 无符号

可用于修饰 char 和整型 (包括 short 和 long 修饰过的整型)

signed int  等价与 intunsigned int 使得原有整型长度不变,但是最高位符号位也变成了数据位。仅能表示 0 和正数signed char 强制 char 可以存储有符号整数unsigned char 强制 char 可以存储无符号整数不加限定 则是否有符号依据机器所定

1、2、3 常量表示形式

#include<stdio.h>int main(){    //int 型     printf("%d\n",sizeof(10));    // L long 型    printf("%d\n",sizeof(10.L));    // f float 型    printf("%d\n",sizeof(10.f));    //double    printf("%d\n",sizeof(10.0));	return 0;}输出:    4    16    4    8
进制表示:	默认 10 进制	c = a + 31;	c = a + 037   // 0 开头表示8进制	c = a + 0x1f  //0x开头表示16进制
'0'输出 对应字符的 ASCII 码    //字符串“ I AM STRING”

1、3 数据类型转换

1、3、1 自动转换

#include<stdio.h>int main(){    short int a = 1;    int b = 1;    float c = 1.0;    double d = 1.1;    printf("%d\n",sizeof(a));    printf("%d\n",sizeof(a+b));    printf("%d\n",sizeof(a+c));    printf("%d\n",sizeof(a+d));	return 0;}

1、3、2 强制转换

(类型名)表达式;(float) a;(int) (c+d);(float) 5;

2、运算符

img

img

/* 三元运算符实例 */   a = 10;   b = (a == 1) ? 20: 30;   printf( "b 的值是 %d\n", b );    b = (a == 10) ? 20: 30;   printf( "b 的值是 %d\n", b );

3、函数

3、1 定义

return_type function_name( parameter list );返回值类型 + 函数名+(函数参数列表)

3、2 函数递归调用

img

3、3 作用域规则

#include<stdio.h>函数参数 a 作用域仅限函数内部 所以无法改变外部变量的值void f(int a){    //局部变量生命周期只对函数调用这一段有效    //函数执行完就被回收了     a = 10;}int main(){    int a = 0;    f();    printf("%d",a);	return 0;}输出:0
如果我想通过函数改变外部变量呢?//方式1:        #include<stdio.h>        // c++中将参数定义成引用型        void f(int &a){             a = 10;        }        int main()        {            int a = 0;            f(a);            printf("%d",a);            return 0;        }//方式2:c语言中将函数参数定义成指针型,然后将变量地址传入函数中        #include<stdio.h>        void f(int *a){             a = 10;        }        int main()        {            int a = 0;            //变量地址传入            f(&a);            printf("%d",a);            return 0;        }
//语句块的概念(局部代码块):{}括起来的一条或多条语句int main(){    {        int a = 0;    }     printf("%d",a);}输出: error//语句块中定义的变量只在语句块内有效

3、4 静态变量

#include<stdio.h>void f(){    int a = 1;    a++;    printf("%d\n",a);}int main(){    for(int i = 0;i < 3; ++i){        f();    }	return 0;}输出:    1    1    1每次调用f()都会重新定义一个新的 a,原来的a被回收
//如果想在函数中操作同一个a,使其在函数调用完后不会被回收掉,可以使用静态变量#include<stdio.h>void f(){    static int a = 1;    a++;    printf("%d\n",a);}int main(){    for(int i = 0;i < 3; ++i){        f();    }	return 0;}输出:    2    3    4

4、指针与数组

4、1什么是指针?

//指针也就是内存地址,指针变量是用来存放内存地址的变量。//指针变量声明的一般形式为: type *var_name;
#include<stdio.h>void f(){    static int a = 1;    ++a;    printf("%d\n",a);}int main(){    int a = 1;    //指针保存的是变量的地址值    int *a_point = &a;    printf("%p",a_point);    //通过指针可以修改它指向变量的值    //  ++a 先自增再传值 a++ 先传值再自增    printf("%d",++*a_point);	return 0;}输出:0x7ffe26d3ca44      2

4、2野指针

#include <stdio.h>#include <stdlib.h>//指针未初始化,它所被分配的地址空间可能随机指向一个变量,如果这个变量很重要,那么不小心对其进行修改会造成严重问题。//如果没有变量要指向,可以 int *point = NULL; 让它指向一个任何变量都不会被分配到的地址int main(){    int *point;    printf("%d",point);    return 0;}输出:16(随机数)

4、3指针和函数参数

img

4、2指针对数组的操作

#include<stdio.h>void f(){    static int a = 1;    ++a;    printf("%d\n",a);}int main(){    int a[5] = {1,2,3,4,5};    //指针指向数组第一个元素的地址值    int *p = a;    for(int i = 0;i < 5;++i){        //通过首地址增加,来顺序访问数组元素        printf("%d\t",*(p+i));    }    	return 0;}
//字符型数组char *s = "i am string "; //常量不可修改char s1[] = "i am string"; //可修改
指针数组:#include<stdio.h>int main(){    int a[5] = {1,2,3,4,5};    //指针数组中存的都是a中对应元素的地址    int *p[] = {a,a+1,a+2,a+3,a+4};    for(int i = 0;i < 5;++i){        printf("%p\t",p[i]);        printf("%d\t\n",*p[i]);    }    	return 0;}输出结果:    0x7ffde1f97120	1	    0x7ffde1f97124	2	    0x7ffde1f97128	3	    0x7ffde1f9712c	4	    0x7ffde1f97130	5	

5、结构体

typedef :用来给类型取别名    typedef int verType;	verType a 等价于 int a
//封装平面内的一个点的坐标(x,y)struct{	int x;     int y}point;#include<stdio.h>struct{    int x;    int y;}point;int main(){    point.x = 10;    point.y = 20;    printf("%d,%d",point.x,point.y);	return 0;}

5、1 给结构体取别名

typedef struct{	int x;     int y}Point;#include<stdio.h>typedef struct{    int x;    int y;}Point;int main(){    Point point;    point.x = 10;    point.y = 20;    printf("%d,%d",point.x,point.y);	return 0;}

5、2 指向结构的指针

#include<stdio.h>typedef struct{    int x;    int y;}Point;int main(){    Point point;    Point *p = NULL;    p = &point;    //指针指向分量: p->x    //结构体指向分量 : p.x    p->x = 10;    p->y = 20;    printf("%d,%d",p->x,p->y);	return 0;}

5、3 自引用结构

//自引用结构的指针#include<stdio.h>typedef struct Point{    int x;    int y;     struct Point *next;}Point;int main(){    Point p1,p2,p3,p4,p5;    Point *p = NULL;    p1.x = 1; p1.y = 2;    p2.x = 3; p2.y = 4;    p3.x = 5; p3.y = 6;    p4.x = 7; p4.y = 8;    p5.x = 9; p5.y = 10;        p1.next = &p2;    p2.next = &p3;    p3.next = &p4;    p4.next = &p5;    p5.next = NULL;            for (p = &p1; p!=NULL;p = p->next) {        printf("(%d,%d)\n",p->x,p->y);    }   	return 0;}输出:    (1,2)    (3,4)    (5,6)    (7,8)    (9,10)		

6、类(C++)

posted @ 2022-05-06 20:41 阿海是个呆瓜 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    羽尘

    羽尘 (王者 段位)

    2335 积分 (2)粉丝 (11)源码

     

    温馨提示

    亦奇源码

    最新会员