C语言第二次作业
一、指针与数组的学习
1.1 观看指针与数组和指针运算的视频
1.2 观看视频所记录的纸质笔记
1.3 观看视频时所敲打的代码文件
1.4 学习时存在的问题
(1)为什么*p++中++的优先级高于*,在运算时还是先取p的地址然后再加1呢?
答:百度查询了解*p++;等价于*(p++);但是,要注意++放在后面是先使用p原来
的值,然后才是改变p的值。也就是*(p++);等价于 =*p ; p = p+1;这是两方
面综合的结果。
(2)为什么q1-q是6而不是24?
答:看视频知道当两个指针相减时,结果不是两个地址的差,而是两个地址的
差/sizeof(指针类型)。
二、pta作业存在的问题
2.1 判断题
正确答案:a的地址赋给了指针p,那么p+1指向了a[1],*(p+1)就是a[1]的值是4,
**(p+1)即*4读取的是地址4里面的值,而不是4。
定义:指针就是保存地址的变量。
指针之间比较大小限于两个相同类型的指针变量。
2.2 单选题
正确答案:B
因为指针p指向x,p就相当于&x,则*p=*&x,即*p=x,所以(*p)++相当于
x++,故选B。
正确答案:B 我误以为是变量加1了。
再看一遍题后知*p=&a[0]+1是一个指针变量,*p=&a[0]+1就是a[0]的地址
加1,并赋值给p,这样p指向的就是a[1],所以*p的值是3。
2.3 填空题
正确答案:4 6 用Dev-c++运行结果。
正确答案:2 5
查询得知因为函数没有返回值,函数里都是对指针的交换而不是对指针
指向的值的交换,所以指针的值没有变。
2.4 程序填空题
查找知第一空应为a,10,&max,&min, 但还不知道为什么。