(1)c语言中用来存放变量地址的变量称为变量指针,简称指针。
(2)地址和指针,变量或者程序代码被存储在以字节为单位组织的存储器中,一般是按“地址”存取的,对内存单元进行标识编号,房间号就是地址,要注意区分内存单元的内容和内存单元的地址;
(3)c语言中把这种专门用来存放变量地址的变量称为“指针变量”,简称为指针;指针是用存放内存地址的变量,一个指针变量的值是另一个变量的地址,就称该指针变量指向那个变量;
(4)指针变量的定义,一般形式:
类型名 *指针变量名;
(指针声明符*在定义指针变量时被使用,说明被定义的那个变量就是指针)
(5)指针的类型和它所指向变量的类型必须相同。指针也要先定义在赋值。
(6)指针函数也是单向传递,调用函数可以改变实参指针变量所指向的变量的值,不能改变变量值。
(7)访问内存方面他俩都相同, 指针名是变量,数组名死常量。指针代表的地址可以改变,数组不可以。叔祖名可以使用指针形式,指针变量可以转化为数组形式
2. 实验过程中遇到的问题及解决方法:
(1)概念很多,内容也不少,对指针有了初步的了解,但是不是很理解;
(2)看书,问同学;
3. 实验心得体会及本章学习总结:
(1)心得:这章节的内容很多,概念也不少,要多花时间看书,加以练习;
(2)总结:初步了解指针,需要更多的时间学习,需要多了解指针的概念、意义;
4. 几个问题的思考与回答:
(1)两个相同类型的指针变量能不能相加?为什么?
答:不能。因为相加后的值可能超出,不在这个地址内,是毫无意义的,且是不被允许的。
(2)在使用scanf()函数时,输入参数列表需要使用取地址操作符&,但当参数为字符数组名时并没有使用,为什么?如果在字符数组名前加上取地址操作符&,会发生什么?
答:因为字符数组名的值是一个特殊的固定地址,可以看作是常量指针,因此不需要再使用 取地址符来获取该数组的地址。
如果在字符数组名str 前加上取地址操作符&,那么对其取地址&str 可以看做是这个数 组的第一个元素的地址,由于数组地址和数组第一个元素的地址相同,所以&str 表示地址值和str 表示的地址值是相等的。对scanf()的变长参数列表的话,编译器只负责参数传递,怎么解释后边的几个地址的含义, 是由前边的字符串确定的。所以使用scanf(“%s”,str)和 scanf(“%s”,&str)都能通过编译且正常执行。
(3)C语言不允许用赋值表达式直接对数组赋值,为什么?
答:因为数组的数组名本质上来说相当于一个指向该数组的第一个元素的指针常量,不可以对一个常量进行赋值,它不是一个标量。