今天是进筑梦实验室的第一天,心里很开心,希望这里会是我绽放光彩的一个舞台,也希望我能以后一直待在这里为实验室做出一些小小的贡献。今天是进筑梦实验室的第一天,心里很开心,希望这里会是我绽放光彩的一个舞台,也希望我能以后一直待在这里为实验室做出一些小小的贡献。
今天上了程序设计课,在课上学到的知识来和大家分享了哦!
1.指针变量作为函数参数
例题:用指针的方法将两个数按照从大到小的顺序输出
在做这个题的时候,一开始把主函数写在了前面,然后一直是编译错误;但是我把主函数放前面就是对的,认为是我函数声明有误。下面这个是我写错的:
后来我终于知道哪错了,我在主函数里面声明swap函数的时候忘记打分号;了,真的好粗心啊,这次记住,记得一定不要再犯了。下面正确答案:
老师上课还告诉了我们一个写法是错误的,要我们注意一下:
void swap(int *p1,int *p2)
{int *temp; //*temp是指针变量temp所指向的变量
*temp=*p1;
*p1=*p2; //*p1,*p2分别都是a,b;为整型变量
*p2=*temp;
}
注1:因为未给temp赋值,因此temp中无确定的值,所以它所指向的存储单元也是无法预见的
注2:在执行完这个函数后,a和b的值发生了变化,但是p1和p2的值不变
后来老师又在这个基础上让我们想想将3个数按从大到小的顺序输出,我写对了,嘿嘿
2.在引用数组元素时指针的运算
数组元素的指针(数组元素的地址)
这两个语句等价:p=&a[0] //p的值是a[0]的地址
p=a; //p的值是数组a首元素(即a[0]的地址)
如果p的初值为&a[0],则p+i和a+i就是数组元素a[i]的地址,即指向a数组序号为i的元素
老师让我们手动运行一个题目来找出答案,看看你能不能做对撒:
#include<stdio.h> void fun(char *a,char *b) //a和b分别指向p1和p2,即指向c1和c2 { a=b; //a指向b中的值a (*a)++; //a指向的值+1,变为b } int main() { char c1=A,c2=a,*p1,*p2; p1=&c1; //p1指向c1即A p2=&c2; //p2指向c2即a fun(p1,p2); //调用函数fun printf("%c%c ",c1,c2); //c1中的值仍不变依然为A,c2中的值变为了b return 0; } 程序运行后的输出结果是___A____ A.Ab B.aa C.Aa D.Bb
有一个整型数组a,有10个元素,要求输出数组中的全部元素。
法一:下标法(不详细说明,很了解)
法二:通过数组名计算数组元素地址,找出元素的值:
法二输入还可以写成:for(p=a;p<a+10;p++) scanf("%d",p);
法三:用指针变量指向数组元素:
3.用指针的方法将一个数组中的数前面的数与后面的数进行交换值:
4.用指针的方法进行选择排序 :
总结:今天上课对老师说的内容大概听明白了,但是对于指针我觉得今天的这几个题目没能够对指针的运用很好理解,觉得这些题用指针只是为了理解这个知识,在这些题用指针感觉是多余的,遇到的有关这种题不是很多吧。
其余:今天上午上了两节课,程序设计课和高数课。高数课上老师今天带我们学习了微积分中的第二类积分,并把分部积分的内容也大概让我们了解一部分,我懂得差不多,可能还有点不太熟练。中午的时候,为班级办事去了;下午的时候,就在写今日学习总结,还和班长一块去为班级办事。