生产实习第三天

姓名:赵杨 日期:2018年6月22日

今日学习任务:今天学习了数组与指针以及函数预处理关键字等知识点,冒泡排序,变量的存储类型。

今日任务完成情况:课后习题完成 150+行的代码

今日开发中出现的问题汇总: 对于指针方面的知识还是比较模糊不清楚的

今日未解决问题:无。

今日开发收获:巩固了关于数组与指针的知识点,并学习了关于关键字方面的知识点。

自我评价:感觉还可以

总结:

1.一维数组,二维数组如何定义,初始化?如何在程序中赋值?

定义:int a[5];  int a[3][3];  

初始化:int a[5]={0}  int a[3][3]={{1,2,3},{1,2,3},{1,2,3}}     

赋值:a[0]=5;a[0][0]=10;

2.字符数组如何定义,初始化,如何程序中赋值?

定义:char s[5]; 

初始化:char  s[]="12345"

赋值:strcpy(s, "Good News!"); /*给数组赋字符串*/

3.字符串常见函数的使用,不用函数如何实现字符串的复制,字符串长度的实现?

创建两个同等大小的数组,用for语句循环对应赋值复制。用for,if语句检查每一个数组,知道检测到\0,测出长度。

4.函数的构造有哪些?入参,返回值如何在函数中体现?形参,实参是如何传递数据?

函数类型     函数名(形式参数类型说明表)
{
声明部分
执行部分

}

int init(int x, int y)

{

    return x+y;

}

值传递方式方式:

  函数调用时,为形参分配单元,并将实参的值复制到形参中

  调用结束,形参单元被释放,实参单元仍保留并维持原值;

特点

形参与实参占用不同的内存单元;  单向传递


5.值传递,地址传递是怎么回事?如何实现在子函数中数值交换后在主函数中能实现?

地址传递方式:

函数调用时,将数据的存储地址作为参数传递给形参

特点:

u 形参 与实参占用同样的 存储单元;
u “双向”传递;
实参 和形参必须是地址常量或 变量;

6. Auto,register,extern,static关键字的使用,详细说明

1.   自动变量(autovariable

函数中的局部变量,如果不用static特别说明,则编译系统默认为自动变量,它在函数调用中分配内存空间,数据存储在动态存储区,在函数调用结束后,自动释放这些空间。

 

2.   register

一般情况下,变量存放在内存中,当程序中用到哪个值时,将其从内存中取出送到CPU。对于频繁使用的变量,如for循环操作,为了提高效率,可以请求编译器将这个变量保存在CPU的寄存器中,即寄存器变量,从而加快程序的运行。不过现在的编译器,优化性较强,所以不必用register声明变量。

 

3.    static

(1) static与变量

   static与局部变量

在函数中的局部变量,加上关键字static,该变量就被定义成为一个静态局部变量。标识符如果被声明为static,就具有静态生命周期。它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。因此,函数执行结束后,变量的存储空间依然存在,不随函数执行结束撤销,但其他函数是不能使用它的,或者说其他函数“看不见”它。静态局部变量只在编译时赋一次初值,如果对变量没有赋初值,则在编译的时候自动赋为0,而且在函数下次调用时,变量的值保持为上次使用结束的值。

   static与全局变量

在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。这时,只能在此文件中使用变量,别的文件不能使用。

对于全局变量,即使在定义前不加static,它也是按静态方式存储的,static只是影响变量的作用范围,这时可以在别的文件中使用变量。

(2) static与函数

对于函数前加static,表示此函数只能在此文件中调用,别的文件“看不见”它。这样就可以在两个文件中,使用相同的函数名称而互不影响。

(3) static与类

   static与类的数据成员

1)       对于类的数据成员,在前面加上static关键字,为静态数据成员,表示这个数据成员不属于某个对象,而是所有对象都可以访问它。而且,即可以像普通数据成员那样通过对象(.操作符)访问,也可以用专有方式,通过类名(::操作符)访问静态数据成员。

2)       静态数据成员在内存中只占一份存储空间,因此,每个对象都可以改变它的值。它的存储空间不随建立的对象的撤销而撤销,而是在程序运行结束时撤销。

3)       不能用参数列表对静态数据成员初始化,如果未对其初始化,子编译系统将其初始化为0。

4)       而非静态数据成员,在产生每一个对象的时候都会对应产生这个数据的一个存储空间。

   static与类的成员函数

1)       同静态数据成员类似,静态成员函数也是属于类,不属于对象,所以即可以通过对象(.操作符)访问,也可以通过类名(::操作符)访问静态成员函数。

2)       由于静态成员函数属于类,不属于特定的对象,而this指针是关于特定的对象的,所以静态成员函数没有this指针,静态成员函数一般是用来访问静态数据成员,不访问非静态数据成员(可以访问非静态数据成员,但不提倡这样做)。而非静态的共有(public)成员函数既可以访问静态数据成员也可以访问非静态数据成员。

 

4.   extern

extern只能用来声明已定义的变量,不能用于变量的定义。

声明包括定义,但不是所有的声明都是定义。关于声明和定义的简单区分方法可以用:建立存储空间的声明称为定义性声明,把不建立存储空间的声明称引用性声明。

int a;        //定义性声明,既是声明,又是定义。为变量a开辟存储空间

extern int a;  //只是声明,不是定义,不为变量a开辟存储空间

(1) 在一个文件内使用extern

变量的作用域,一般是从变量的定义处开始的,如果想在定义变量之前使用这个变量,可以extern来声明外部变量来扩展它的作用域,即同一个文件内,extern声明之后就可以作用域扩大到声明处到文件结束。extern对此变量进行声明,这里变量声明表示这个变量是已经在别的地方定义的,声明不会产生新的变量也不再给变量分配内存空间

(2) 在多个文件内使用extern

对于多个源文件,如果想在一个文件中使用另一个已定义的外部变量,可以在未定义该外部变量的文件内做extern声明即可以使用,编译时遇到extern,会先在文件内找是否定义了该外部变量。如果未找到则在链接时在其他文件中找。如果在两个文件中定义了一个同名变量,会出现重复定义的错误。但是需要注意在不同文件中extern声明变量,会相互影响,可能执行一个文件时改变了该全局变量的值,影响其他文件的调用。如果我们希望该外部变量只能在本文件内使用,而不能被其他文件引用可以在外部变量定义时加static声明。防止别人写的模块误用。也就是说,一个文件中用了static int a;试图在另一个文件中用extern int a来扩展a的作用域是不行的,这个操作可以通过编译,但不能运行。将static去掉,程序可运行。

猜你喜欢

转载自blog.csdn.net/qq_42492564/article/details/80777867