C语言第二次作业

1.笔记

C语言第二次作业

C语言第二次作业

 2.视频中的代码列表

 C语言第二次作业

 3.存在的问题

const关键字及其作用(用法)

const定义只读变量的关键字,或者说 const 是定义常变量的关键字。

说 const 定义的是变量,但又相当于常量;说它定义的是常量,但又有变量的属性,所以叫常变量。用 const 定义常变量的方法很简单,就在通常定义变量时前面加 const 即可,如:

  1. const int a = 10;

const 和变量类型 int 可以互换位置,二者是等价的,即上条语句等价于:

  1. int const a = 10;


用 const 定义的变量的值是不允许改变的,即不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋初值。
如果定义的时候未初始化,对于未初始化的局部变量,程序在执行的时候会自动把一个很小的负数存放进去。这样后面再给它赋初值的话就是“改变它的值”了,即发生语法错误。
用 const 修饰的变量,无论是全局变量还是局部变量,生存周期都是程序运行的整个过程。全局变量的生存周期为程序运行的整个过程这个是理所当然的。而使用 const 修饰过的局部变量就有了静态特性,它的生存周期也是程序运行的整个过程。我们知道全局变量是静态的,静态的生存周期就是程序运行的整个过程。但是用const修饰过的局部变量只是有了静态特性,并没有说它变成了静态变量虽然 const 定义的是只读变量,就相当于是定义一个常量。但是只读变量也是变量,所以 const 定义的变量仍然不能作为数组的长度。但是需要注意的是,在 C++ 中可以!C++ 扩展了 const 的含义,在 C++ 中用 const 定义的变量也可作为数组的长度。

2)数值交换的问题(PTA 4-5)

为什么题中执行了函数最后数值却没有交换?

C语言第二次作业

C语言第二次作业

回看MOOC视频发现,老师讲的是带着*,所以指针指向的数发生了交换,而题中没有*,也就是只交换了地址,数值并未交换。

3)整理了几个有关地址赋值自己容易搞混的语句。

int k=1,j=2,
*p=&k,//p现在是k的地址,它的值现在和k一样 *p现在的值是1
*q=p;//p指针的值给q了,*q的值是1
p=&j;//p指向j了,*p的值是2