作业十及总结
一知识点:
①指针变量的定义
类型名 *指针变量名;
类型名指定指针变量所指向变量的类型,必须是有效的数据类型,int,float,char等。指针变量名是指针变量的名称,必须是一个合法的标识符。
定义指针变量要使用指针声明符*。例如:
int i,*p;
注:指针声明符*在定义指针变量是被使用,说明被定义的那个变量是指针。
注:定义多个指针变量时,每个指针变量前都必须加上*。
②.指针的基本运算。
1.取地址运算和间接访问运算
单目运算符&用于给出变量的地址,例如:
int *p,a=3;
p=&a;
注:指针的类型和它所指向变量的类型必须相同。
“*”还被用于访问指针所指向的变量,称为间接运算符。
③指针变量的初始化
C语言中的变量在引用前必须先定义并赋值,指针变量在定义后也要先赋值再引用。在定义指针变量时,可以同时对它赋初值。例如:
int a;
int *p1=&a;
int *p2=p1;
注:1.在指针变量定义或者初始化时变量名前面的“*”只表示该变量是个指针变量,它既不是乘法运算符也不是间接访问符。
2.把一个变量的地址作为初始值赋给指针变量时,该变量必须在此之前已经定义。因为变量只有在定义后才被分配存储单元,它的地址才能赋给指针变量。
3.可以用初始化了的指针变量给另一个指针变量作初始化值。
4.不能用数值作为指针变量的初值,但可以将一个指针变量初始化为一个空指针。例如:int *p=1000;是不对的,而int *p=0;是将指针变量初始化为空指针。这里0是ASCII字符NULL的值。
5.指针变量定义时的数据类型和它所指向的目标变量的数据类型必须一致,因为不同的数据类型所占用的储存单元的字节数不同。
二 实验过程中遇到的问题及解决方法:
{ int y; float z; y=x/1; z=x-y; *intpart=y; *fracpart=z; }
在写第三题的时候,判断拆分整数部分和小数部分时,没有思路。后经过与同学的探讨,发现了易懂,更容易明白的方法。
三 实验心得
同样是做题,每个人都能琢磨出来,可是想的方向去大相径庭。在正确的做出题来时,更要要求我们去更深的一步去了解c语言当中的术语。只有把题搞懂,才能用最简洁的方做出来。
基础不扎实,去看书了。
1.计算两数的和与差。要求自定义一个函数
#include<stdio.h> void sum_diff( float op1, float op2, float *psum, float *pdiff ) { *psum=op1+op2; *pdiff=op1-op2; } int main() { float op1,op2,*psum,*pdiff,sum,diff; printf("Input op1 and op2:"); scanf("%f%f",&op1,&op2); sum_diff(op1,op2,&sum,&diff); printf("sum=%f,diff=%f",sum,diff); return 0; }
测试截图:
2.利用指针找最大值:要求自定义一个函数
#include<stdio.h> void findmax(int *px,int *py,int *pmax) { if(*px<*py) *pmax=*py; else *pmax=*px; } int main() { int x,y,max; printf("Input x和y:"); scanf("%d%d",&x,&y); findmax(&x,&y,&max); printf("%d\n",max); return 0; }
测试截图:
3.拆分实数的整数与小数部分:要求自定义一个函数
#include<Stdio.h> void splitfloat (float x, int *intpart,float *fracpart) { int y; float z; y=x/1; z=x-y; *intpart=y; *fracpart=z; } int main() { float x,fracpart; int intpart; printf("Input x:"); scanf("%f",&x); splitfloat(x,&intpart,&fracpart); printf("the intpart is:%d\n",intpart); printf("the fracaprt is:%f\n",fracpart); return 0; }
测试截图: