精华内容
下载资源
问答
  • 本文主要介绍了C语言初始化效率问题以及关键字解释。
  • c语言初始化程序 C ++中的初始化程序列表 (Initializer List in C++) Initializer list is used to initialize data members. The syntax begins with a colon(:) and then each variable along with its value ...

    c语言初始化程序

    Initializer list is used to initialize data members. The syntax begins with a colon(:) and then each variable along with its value separated by a comma. The initializer list does not end in a semicolon.

    初始化程序列表用于初始化数据成员。 语法以冒号(:)开头,然后是每个变量及其值,并以逗号分隔。 初始化列表不以分号结尾。

    Syntax:

    句法:

    Constructorname(datatype value1, datatype value2):datamember(value1),datamember(value2)
    {
        ...
    }

    For example:

    例如:

    #include<iostream>
    using namespace std;
    
    class Base
    {
        private:
        int value;
        public:
        // default constructor
        Base(int value):value(value)
        {
            cout << "Value is " << value;
        }
    };
    
    int main()
    {
        Base il(10);
        return 0;
    }

    Value is 10

    值是10

    The above code is just an example to understand the syntax of Initializer list. In the above code, value can easily be initialized inside the constructor as well, hence we do not have to use initializer list.

    上面的代码仅是了解Initializer列表语法的示例。 在上面的代码中, value也可以很容易地在构造函数内部初始化,因此我们不必使用初始化列表。

    C ++中初始化列表的使用 (Uses of Initializer List in C++)

    There are situations where initialization of data members inside constructor doesn't work and Initializer List must be used. Following are such cases:

    在某些情况下,构造函数内部的数据成员的初始化无法正常工作,必须使用初始化列表。 以下是这种情况:

    1)没有基类默认构造函数时 (1) When no Base class default constructor is present)

    In Inheritance base class constructor is called first(Order of Constructor call), followed by the child class constructor.

    在继承中,基类的构造函数首先被调用( Order of Constructor call ),随后是子类的构造函数。

    Therefore, in the example below Base_ class constructor will be called before InitilizerList_ class constructor due to which the below program will throw compilation error: "No default constructor exists for class Base_".

    因此,在下面的例子中Base_类的构造函数将之前被称为InitilizerList_类的构造函数,由于其下面的程序将抛出编译错误:“没有默认构造函数存在类Base_”。

    #include<iostream>
    using namespace std;
    
    class Base_
    {
        public:
        // parameterized constructor
        Base_(int x)
        {
            cout << "Base Class Constructor. Value is: " << x << endl;
        }
    };
    
    class InitilizerList_:public Base_
    {
        public:
        // default constructor
        InitilizerList_()
        {
            Base_ b(10);
            cout << "InitilizerList_'s Constructor" << endl;
        }
    };
    
    int main()
    {
        InitilizerList_ il;
        return 0;
    }

    The above code example can be rewritten using initializer list, and will execute smoothly without any error.

    上面的代码示例可以使用初始化列表重写,并且可以顺利执行而没有任何错误。

    Here is the new code:

    这是新代码:

    #include<iostream>
    using namespace std;
    
    class Base_
    {
        public:
        // parameterized constructor
        Base_(int x)
        {
            cout << "Base Class Constructor. Value is: " << x << endl;
        }
    };
    
    class InitilizerList_:public Base_
    {
        public:
        // default constructor using initializer list
        InitilizerList_():Base_(10)
        {
            cout << "InitilizerList_'s Constructor" << endl;
        }
    };
    
    int main()
    {
        InitilizerList_ il;
        return 0;
    }

    Base Class Constructor value is 10 InitilizerList_'s constructor

    基类构造函数的值为10 InitilizerList_的构造函数

    2)使用引用类型时 (2) When reference type is used)

    If you have a data member as reference type, you must initialize it in the initialization list. References are immutable hence they can be initialized only once.

    如果您有数据成员作为引用类型,则必须在初始化列表中对其进行初始化。 引用是不可变的,因此只能初始化一次。

    #include<iostream>
    using namespace std;
    
    class Base
    {
        private:
        int &ref;
        public:
        Base(int &ref):ref(ref)
        {
            cout << "Value is " << ref;
        }
    };
    
    int main()
    {
        int ref=10;
        Base il(ref);
        return 0;
    }

    Value is 10

    值是10

    3)用于初始化const数据成员 (3) For initializing const data member)

    const data members can be initialized only once, so it must be initialized in the initialization list.

    const数据成员只能初始化一次,因此必须在初始化列表中进行初始化。

    #include<iostream>
    using namespace std;
    
    class Base
    {
        private:
        const int c_var;
        public:
        Base(int c_var):c_var(c_var)
        {
            cout << "Value is " << c_var;
        }
    };
    
    int main()
    {
        Base il(10);
    }

    Value is 10

    值是10

    4)当数据成员和参数具有相同的名称时 (4) When data member and parameter have same name)

    #include<iostream>
    using namespace std;
    
    class Base
    {
        private:
        int value;
        public:
        Base(int value):value(value)
        {
            cout << "Value is " << value;
        }
    };
    
    int main()
    {
        Base il(10);
        return 0;
    }

    Value is 10

    值是10

    5)为了提高性能 (5) For improving performance)

    If you are assigning the values inside the body of the constructor, then a temporary object would be created which will be provided to the assignment operator. The temporary object will be destroyed at the end of the assignment statement. Creation of temporary object can be avoided by using initializer list.

    如果要在构造函数的主体内分配值,则将创建一个临时对象,该对象将提供给赋值运算符。 临时对象将在赋值语句的末尾销毁。 通过使用初始化程序列表,可以避免创建临时对象。

    翻译自: https://www.studytonight.com/cpp/initializer-list-in-cpp.php

    c语言初始化程序

    展开全文
  • 关于C语言初始化,以及形参实参的一道易错题
    /*
    关于C语言初始化,以及形参实参的一道易错题
    */
    #include <stdio.h>
    void func(int a, int b, int c) {
    	c = a * b;
    }
    int main() {
    	int c;
    	func(2, 3, c);
    	printf("%d\n", c);
    	return 0;
    }
    /*
    分析:这里输出的结果是不确定的。
    因为实参变量和形参变量虽然同名
    但不是代表同一个内存地址。并且
    在C语言中一般变量定以后并不自动
    赋予初值因此实参C的取值不确定。
    */


    展开全文
  • c语言数组初始化 来自《C程序设计语言(第2版•新版)》,也就是K&R 数组的初始化可以在声明的后面紧跟一个初始化的表达式列表,初始化表达式列表用花括号括起来,各初始化表达式之间通过逗号分隔。例如,如果要用...

    c语言数组初始化

    来自《C程序设计语言(第2版•新版)》,也就是K&R

    数组的初始化可以在声明的后面紧跟一个初始化的表达式列表,初始化表达式列表用花括号括起来,各初始化表达式之间通过逗号分隔。例如,如果要用一年中各月的天数初始化数组days,其变量的定义如下:
    int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    当省略数组长度时,编译器把花括号中初始化表达式的个数作为数组的长度,在本例中数组的长度为12。
    如果初始化表达式的个数比数组元素数少,则对外部变量,静态变量和自动变量来说,没有初始化表达式的元素将被初始化为0,如果初始化表达式的个数比数组元素数多,则是错误的。不能一次将一个初始化表达式指定给多个数组元素,也不能跳过前面的数组元素而直接初始化后面的数组元素。

    例如:int a[5] = {1};
    这个是初始化,不是赋值。

    转载别人的研究方法:gcc编译后gdb跟踪

    http://blog.csdn.net/withsakura/article/details/25567519

    展开全文
  • C语言初始化——栈的初始化

    千次阅读 2016-09-25 20:25:00
    5.栈的初始化 1 init_stack: 2 ldr sp,=0x54000000 3 mov pc,lr init_stack 6410内存的起始地址:0x50000000,内存大小设为64MB     转载于:...

    是一种具有后进先出性质的数据组织方式,也就是说后存放的先取出,先存放的后取出。栈底是第一个进栈的数据所处的位置,栈顶是最后一个进栈的数据所处的位置。

    1.满栈与空栈

    根据SP指针指向的位置,栈可以分为满栈和空栈

    满栈:当堆栈指针SP总是指向最后压入堆栈的数据。

     

    空栈:当堆栈指针SP总是指向下一个将要放入数据的空位置。

     

    2.升栈和降栈

    根据SP指针移动的方向,栈可以分为升栈和降栈。

    升栈:随着数据的入栈,SP指针从低地址->高地址移动。

    降栈:随着数据的入栈,SP指针从高地址->低地址移动

     

    ARM采用的是满降栈

    3.栈帧

    就是一个函数所使用的那部分栈,所有函数的栈帧串起来就组成了一个完整的栈。

    栈帧的两个边界分别由fp(r11)和sp(r13)来限定。

    4.栈的作用

    4.1 保存局部变量

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int a;
     6 
     7     a++;
     8 
     9     return a;
    10 }
    stack1.c

    arm-linux-gcc -g stack1.c -o stack1

    arm-linux-objdump -D -S stack1 >dump

    vim dump

    4.2 参数传递

     1 #include <stdio.h>
     2 
     3 
     4 void func1(int a,int b,int c,int d,int e,int f)
     5 {
     6     int k;
     7     k=e+f;
     8 }
     9 
    10 int main()
    11 {
    12     func1(1,2,3,4,5,6);
    13     return 0;
    14 }
    stack2.c

    同上,可查看!

    4.3 保存寄存器的值

     1 #include <stdio.h>
     2 
     3 void func2(int a,int b)
     4 {
     5     int k;
     6     k=a+b;
     7 }
     8 
     9 void func1(int a,int b)
    10 {
    11     int c;
    12     func2(3,4);
    13     c=a+b;
    14 }
    15 
    16 int main()
    17 {
    18     func1(1,2);
    19     return 0;
    20 }
    stack3.c

    同上,可查看!

    5.栈的初始化

    1  init_stack:
    2    ldr sp,=0x54000000                                                        
    3    mov pc,lr
    init_stack

    6410内存的起始地址:0x50000000,内存大小设为64MB

     

     

    转载于:https://www.cnblogs.com/boyiliushui/p/5906114.html

    展开全文
  • 初始化顺序表并插入元素
  • c语言初始化数组为特定值

    千次阅读 2013-07-01 22:04:35
    1. 不初始化 int a[5][5]; 当数组是全局变量时,默认初始化为0 当数组是全局变量时,默认是堆栈中的随机值 2.初始化一个值 int a[5][5]={0}; 无论是全局变量,还是局部变量都初始化为0 int a[5][5]={1}; 无论是...
  • #include #include int main(int argc, char *argv[]) { char ary_name[20]; char ary_vname[20]; memset(ary_name,0x0,10); sprintf(ary_name,"%s","我是中国人"); strcpy(ary_name,"字符串...printf(
  • 如图,我在网易云课堂的C语言练习中做题,做到这道题的...我知道如果C语言中,局部变量没有初始化那么是内存中的随机的值,但是按照这道题的描述,这个随机值一定是正数么? 不能是负数么? 还是这道题答案有问题?
  • C语言结构体初始化

    千次阅读 2018-11-06 19:32:26
    C语言结构体初始化
  • C语言指定初始化

    2020-06-30 20:04:44
    C语言指定初始化数组指定初始化结构体指定初始化指定初始化综合使用新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个...
  • C语言结构体初始化 C语言结构体初始化有以下4种方法: 1、定义后初始化 typedef struct { int* age; int* height; int weight; }Student; void main() { int a = 10, b = 12; Student stu1; stu1.age = &...
  • C语言数组初始化

    千次阅读 2019-01-13 23:23:20
    C语言数组初始化 wchar_t wname[128]={0}; char cname[256]={0}; 我感兴趣的是: 1. 这种赋值的结果。 2. 这种形式是否符合标准编码规则? 我找到了如下资料,可能有助于对这个知识点的掌握。 /*初始化值的...
  • C语言标记化结构初始化语法扫盲

    千次阅读 2012-12-11 20:06:28
    以前在学习C语言时听说过所谓的C语言标记化结构初始化语法,但当时出于偷懒就没有细究。最近学习Linux设备驱动,就对它的结构体初始化写法感到奇怪,所有的初始化代码都写清了变量名,并且变量名前面还有一个诡异的...
  • C语言数组的初始化这里主要介绍C语言如何对数组进行初始化。先定义几个工具函数和宏。#define LEN 5// function to print array contentvoid show(int a[]) {for (int i=0; iprintf("a[%d]=%d\n", i, a[i]);}}一维...
  • c语言变量初始化

    2017-09-26 22:13:29
     这段话的意思是:当局部变量被定义时,局部变量不会被系统初始化,但全局变量被系统定义时系统会自动的给全局变量一个值,例如:char型,系统默认的初始值为 '\0' ,int型,系统默认的初始值为 0 。  总之,...
  • 1、{0} 初始化int arr1[3] = {0};使用 {0} 的方式最简洁,一般在定义的时候使用。2、for 循环初始化int arr2[3];for (int i = 0; i < 3; i++) {arr2[i] = i;}使用 for 循环的好处是:可以将每个元素设为不同的值...
  • c语言变量初始化问题

    2020-05-21 17:12:48
    “全局变量的内存分配是静态的,位于PE文件在数据区,在main()前由C、C++运行期函数初始化,如果没有初值,会被初始化为0。局部变量的内存分配是动态的,位于线程堆栈中。如果没有初始化的,初值视当前内存内的值而...
  • 最近学习Linux设备驱动,又遇到了,就查了一下,发现自己的知识果然纰漏不少,此种初始化写法并不是什么特殊的代码风格,而是所谓的C语言标记化结构初始化语法(designated initializer),而且还是一个ISO标准。...
  • C语言数组初始化问题

    千次阅读 2015-03-31 12:22:37
    最近在复习C语言,然后做题时突然想到了数组的初始化问题,然后查阅资料了解到结论:全局和静态数组都按语言规范要求被初始化为0 对于局部数组,初始化元素个数少于数组元素个数时,数组前面的元素值对应初始化值,...
  • C语言结构体初始化 定义: struct 结构体名 { //成员列表 类型名 成员名 } //变量列表 使用 “.” ,调用结构体各项成员,完成基本操作 结构体数组初始化 #include&lt;iostream&gt; using ...
  • C语言字符数组初始化

    2013-03-31 18:27:58
    C语言字符数组初始化
  • c语言初始化一个数组In this article, we’ll take a look at how we will initialize an array in C. 在本文中,我们将研究如何在C中初始化数组。 There are different ways through which we can do this, so ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,624
精华内容 5,849
关键字:

c语言初始化

c语言 订阅