实验11——指针的基础应用
2016-12-08 10:09
253 查看
1.本次课学到的知识点:
(1)指针是c语言中非常重要的概念,使用指针可以对复杂数据进行处理,能对计算机的内存分配进行控制,在函数调用中使用指针还可以返回多个值。
(2)指针访问内存和操纵地址,是通过变量的地址进行操控。
(3)指针变量:变量p是用来存放地址的变量,实现对变量的间接操作。
(4)指针变量定义:
类型名 *指针变量名;
类型名指定指针变量所指向的变量的类型,必须是有效数据类型:int,float,char等。
(5)定义多个指针变量时,每一个指针变量前都必须加*。
不同类型指针变量所占的内存空间大小相同。
(6)指针的基本运算:
1,取地址运算和间接访问运算:单目运算符&用于给出变量的地址。
2,赋值运算:指针被定义并赋值后,就可以如同其他类型变量一样进行赋值变量。
(7)冒泡排序:每一次循环都将当前最大元素“冒泡”到合适位置。
2. 实验过程中遇到的问题及解决方法:
(1)对指针还不太理解,做2,3,4题时有些茫然。
(2)看书反复理解,和117同学讨论,学习了第3第4道题,第2题还有待解决.
3. 实验心得体会及本章学习总结:
开始学指针,一下子感觉到难度上升了,尤其指针和地址的概念比较抽象,不太能理解,概念和程序的架构还不太清楚。
4. 几个问题的思考与回答:
(1)两个相同类型的指针变量能不能相加?为什么?
不能。因为指针变量是一种特殊的变量,指针变量的值存放的是所指向变量的地址,两个地 址相加并不能保证结果为一个有效的地址值,因而在C 语言中指针变量相加是非法的。
(2)在使用scanf()函数时,输入参数列表需要使用取地址操作符&,但当参数为字符数组名时并没有使用,为什么?如果在字符数组名前加上取地址操作符&,会发生什么?
因为字符数组名的值是一个特殊的固定地址,可以看作是常量指针,因此不需要再使用 取地址符来获取该数组的地址。
如果在字符数组名str 前加上取地址操作符&,那么对其取地址&str 可以看做是这个数 组的第一个元素的地址,由于数组地址和数组第一个元素的地址相同,所以&str 表示地址值和str 表示的地址值是相等的。对scanf()的变长参数列表的话,编译器只负责参数传递,怎么解释后边的几个地址的含义, 是由前边的字符串确定的。所以使用scanf(“%s”,str)和 scanf(“%s”,&str)都能通过编译且正常执行。
(3)C语言不允许用赋值表达式直接对数组赋值,为什么?
数组名可以看作是常量指针,因为不可以对一个常量进行赋值,所以不允许用赋值表达式直接对数组进行赋值。
(1)指针是c语言中非常重要的概念,使用指针可以对复杂数据进行处理,能对计算机的内存分配进行控制,在函数调用中使用指针还可以返回多个值。
(2)指针访问内存和操纵地址,是通过变量的地址进行操控。
(3)指针变量:变量p是用来存放地址的变量,实现对变量的间接操作。
(4)指针变量定义:
类型名 *指针变量名;
类型名指定指针变量所指向的变量的类型,必须是有效数据类型:int,float,char等。
(5)定义多个指针变量时,每一个指针变量前都必须加*。
不同类型指针变量所占的内存空间大小相同。
(6)指针的基本运算:
1,取地址运算和间接访问运算:单目运算符&用于给出变量的地址。
2,赋值运算:指针被定义并赋值后,就可以如同其他类型变量一样进行赋值变量。
(7)冒泡排序:每一次循环都将当前最大元素“冒泡”到合适位置。
2. 实验过程中遇到的问题及解决方法:
(1)对指针还不太理解,做2,3,4题时有些茫然。
(2)看书反复理解,和117同学讨论,学习了第3第4道题,第2题还有待解决.
3. 实验心得体会及本章学习总结:
开始学指针,一下子感觉到难度上升了,尤其指针和地址的概念比较抽象,不太能理解,概念和程序的架构还不太清楚。
4. 几个问题的思考与回答:
(1)两个相同类型的指针变量能不能相加?为什么?
不能。因为指针变量是一种特殊的变量,指针变量的值存放的是所指向变量的地址,两个地 址相加并不能保证结果为一个有效的地址值,因而在C 语言中指针变量相加是非法的。
(2)在使用scanf()函数时,输入参数列表需要使用取地址操作符&,但当参数为字符数组名时并没有使用,为什么?如果在字符数组名前加上取地址操作符&,会发生什么?
因为字符数组名的值是一个特殊的固定地址,可以看作是常量指针,因此不需要再使用 取地址符来获取该数组的地址。
如果在字符数组名str 前加上取地址操作符&,那么对其取地址&str 可以看做是这个数 组的第一个元素的地址,由于数组地址和数组第一个元素的地址相同,所以&str 表示地址值和str 表示的地址值是相等的。对scanf()的变长参数列表的话,编译器只负责参数传递,怎么解释后边的几个地址的含义, 是由前边的字符串确定的。所以使用scanf(“%s”,str)和 scanf(“%s”,&str)都能通过编译且正常执行。
(3)C语言不允许用赋值表达式直接对数组赋值,为什么?
数组名可以看作是常量指针,因为不可以对一个常量进行赋值,所以不允许用赋值表达式直接对数组进行赋值。
相关文章推荐
- dyld 加载 Mach-O
- View绘制流程以及自定义控件
- C#学习常用类(2000)---Thread类(Thread.IsBackground属性)
- 宏定义
- Linux——代码编辑器vim的功能
- 解决滑动控件与ScrollView冲突
- Linux/CentOS 升级C基本运行库CLIBC的注意事项(当想解决GLIBC_2.x找不到的编译问题)
- 破解图片马赛克
- 插入外接键盘后,自动切换Karabiner的Profile
- Codeforces 28D
- Linux——文本编辑器vi
- 第15周项目1 -(1)验证哈希表相关算法
- oracle 的SGA与PGA分析
- 镜头C接口和CS接口的简单区分
- Google 瀏覽器要禁止 Flash?你不是當真了吧
- Linux查看CPU和内存使用情况
- 第12周项目2-操作用邻接表存储的图
- Flume 小记(三) HttpSource 存入本地
- 关于优酷开放SDK中setOnRealVideoStartListener
- Docker创建镜像两种方法详解