栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言学习笔记

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言学习笔记

1.地址传递与指针传递

        student

        {

        string name;

        int age;

        int score;

        } 

值传递

void printstudent(student s)

{

        cout <<"姓名"<

}

地址传递

void printstudent1(student *p)

{

        cout <<"姓名"<name<<“年龄”<age<<“分数”<score<

}

        int main()

{

        student s;

        s.name = ''张三";

        s.age = 20;

        s.score = 85;

        printstudent(s);

        printstudent1(&s);

        }

将函数的形参设置成指针,可以减少内存空间,而且不会复制新的副本。

student Arry[5]结构题数组。 

2.C++中存储空间的分配(内存四区)

        内存四区存在的意义:方便不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程。

        **程序运行前的区域

        2.1 代码区

                存放CPU机器指令

                代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份就可。

                代码区是只读的,使其只读的原因是防止程序意外的修改指令。

        2.2全局区      

                全局变量和静态变量存放在此(包括常量区、字符串常量、还有其他常量)。

                该区域在程序结束以后由操作系统释放。

        **程序运行后的

 //全局变量

int c;

int d;//写在函数体外部的变量称为全局变量

//全局常量

const e;

int main(){

//局部变量

        int a;//写在函数体里的都是局部变量

        intb;

//静态变量

        static int s_a = 10;

//字符串常量

        '"hello word" 双引号框起来就是字符串常量。

//const常量

        const int c_a = 10;//全局常量

}

代码的地址不在一个段里面。

                ****程序运行后

                2.3栈区

                由编译器自动分配释放,存放函数的参数值,局部变量等

                注意:不要放回局部变量的地址,栈区开辟的数据由编译器自动释放。

                2.4堆区

                由程序员分配释放,若程序员不释放,程序结束时由操作系统回收

                c++中主要利用new在堆区开辟内存

                void* func()

                {

                          //利用new关键字 可以将数据开辟到堆区 //如果不调用new,就在栈区,放回的地址就不可行

                          //指针的本质也是局部变量,放在栈上,指针保存的数据是放在堆区。

                        int *p = new int(10)

                        return p;

                }

                 //看下图理解

                        

      3、new操作符

                c++中利用new操作符在堆区开辟数据,由程序员分配,由程序员释放(delete)

                   int * func()

                {

                int * p =  new int(10);

                return p;

}             

                void test01()

                {        

                        int * p = func();

                        cout << *p <

                        cout << *p <

                        delet p;       

                        cout << *p <

                        

                }

                ****在堆区中开辟数组

                void test02()

        {

                int * arr = new int[10];

                for (int i =0 ; i<10 ; i++)

                {

                        arr[i] = i+100;

                        cout<< arr[i]<

                }

                 delete[] arr;

        }

4.引用

        引用:起别名。

                int a =10;

                int &b = a;

        4.1 引用必须要初始化

              一旦初始化后,就不可以更改了

         4.2引用做函数参数时。

                作用:函数传参时,可以利用引用的技术让形参修饰实参。

                优点:可以简化指针修改实参

          //交换函数

           1、值传递

                void mySwap01(int a , int b)

        {

                int temp = a;

                 a= b ;

                 b=a;

}

           2、地址传递//利用形参修饰实参

                void mySwap02(int *a , int *b)

                {

                int temp = *a;

                 *a= *b ;

                 *b=*a;         

                }

           3、引用传递//形参修饰实参

                 void mySwap03(int &a , int &b)

                {          

                int temp = a;

                 a= b ;

                 b=a;

                }

                int main()

                {

                        int a = 10 ;

                        int b = 20;

                        mySwap01(a,b);

                        mySwap02(&a,&b);

                        mySwap03(a,b);                }

                4.3引用做函数的返回值

                        引用是可以作为函数的返回值的存在

                        1、函数不要返回局部变量的引用

                        2、函数的调用可以作为左值

                                int& test02()

                        {

                                static int a = 10;

                                return a;

                        }

                                int main()

                        {

                                int &ref2 = test02();

                                cout << "ref2"<

                                test02() = 1000;如果函数的返回值是引用,这个函数调用可以作为左值

                                cout <<"ref2"<

                        }

                4.4引用的本质

                        本质:引用的本质是在c++内部实现的一个指针常量。

                        

                        结论:c++推荐引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了

                4.5常量引用

                        作用:常量引用主要用来修饰形参,防止误操作。

                        在函数形参列表中,可以加const修饰形参,防止形参改变实参。

                        int main()

                        {

                                int a=10;

                                int &ref = 10;//不合法,

                                //加上const之后 编译器将代码修改 int temp = 10; int &ref = temp;

                                const int & ref = 10;//合法

                        }

                        void showValue(const int &a)

                        {

                                a =1000;//加入const,无法更改

                                cout << "val"<

                         }

                        int main(){

                        

                        int a = 100;

                        showValue(a);

                        } 

5.函数的提高

                5.1函数默认参数

                        int func (int a,int b =20 ,intc = 30)//如果我们传入数据,就用自己的数据,如果没有,就用默认值

                {        

                        return a+b+c;

                }

                        int main()

                {

                        cout << func(10)<

                        system("pause")

                }

                注意事项

                        1.如果某个位置已经有了默认参数,那么从这个位置以后,从左往右都必须有。

                        2.如果函数声明有了默认参数,函数实现就不能有默认参数。

                        int fun2( int a =10,int b=10);

                        

                        int func2(int a = 20, int b =20)

                        {

                                return ...

                        }

                   5.2函数重载,

                         作用:函数名可以相同,提高复用性。

                        函数重载的条件:

                        #在同一作用域下

                        #函数名称相同

                        #函数参数类型不同,或者个数不同或者顺序不同

                5.3函数重载注意事项

                        引用作为重载条件

                        函数重载碰到函数默认参数(写函数重载最好不要加默认参数)

                        

6.类和对象

                C++面向对象的三大特征为:封装、继承、多态

                C++认为万事万物皆为对象,对象上有其属性和行为 称为类

                6.1封装

                6.1.1封装意义

                        封装的意义

                                #将属性和行为作为一个整体,表现生活中的事物

                                #将属性和行为加以权限控制

                                在设计类的时候,属性和行为写在一起,表现事物

                //设计一个圆类,求圆的周长

                //圆求周长的公式:

                //class 代表设计一个类,类后面紧跟着的就是类的名称

                class Cricle

                        {

                                //访问权限

                        public;

                                //属性

                        int m_r;

                                //行为

                         double calulateZC()

                        {

                                return 2 *PI *m_r;

                        }

                        }

                        int main(){

                                //通过圆类,创建具体的圆(对象)

                                Circle c1;

                                //给圆对象的属性进行赋值

                                c1.m_r = 10;

                                cout << "圆的周长为"<< c1.calulateZC()<

                        封装意义二:

                        类在设计时,可以把属性和行为放在不同的权限下,加以控制访问权限有三种:

                        1.public                公共权限 //成员类内可以访问 类外可以访问,

                        2.protected           保护权限//成员 类内可以访问 类外不可以访问 儿子可以访问父亲中的保护内容。

                        3.private                私有权限//成员 类内可以访问 类外不可以访问 儿子不可访问

              class Person

{

                public:

                                string m_Name;

                protected:

                                string m_car;

                private:

                                int m_Password;

public:

                void func()

        {

                m_name = "张三';

                m_Car = "拖拉机";

                m_Password = "123456";

        }

}          

   int main(){

                Person p1;//类外不可访问

                p1.m_Name = "李四";//类外可以访问

                p1.m_Car = ''奔驰'';//类外不可访问}

                6.1.2struc和class区别(其实差不多)

                        在C++中struct和class唯一的区别就在于默认的访问权限不同

                        区别:

                        #struct 默认权限为公共

                        #class默认权限为私有                

                6.1.3成员属性设置为私有

                        优点1 :将所有成员属性设置为私有,可以自己控制读写权限。

                        优点2:对于写权限,我们可以检测数据的有效性。

                         //设计人类

                        class Person

                        {

                                public:

                                设置姓名

                                           void setName(string name)

                                                {

                                                        m_Name = name;

                                                }

                                读取姓名

                                                string getName()

                                {

                                                return m_Name;

                                }

                                int getAge()

{

                

                }

                                private:

                                                string m_Name;

                                                int m_Age;

                                                string m_Lover;

                        }

                        int main()

                        {

                               //  Person m;

                               // m.m_Name = ://不行,不可访问私有属性

                         }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/656208.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号