心得:
用指针访问内存和操纵地址.
指针变量的定义: (数据)类型名 *指针变量名。指针变量类型被确定后,它只能指向同类型的变量。
定义指针变量时需要指针声明符*,但指针声明符并不是指针的组成部分。在对指针变量命名时(建议)使用其类型名的首字符作为名字。
(*p++)<==>*(p++);
给指针赋值是使指针和所指向变量之间建立关联的必要过程。只能将一个指针的值赋给另一个相同类型的指针。赋值前必须先定义。不能用数值作为指针变量的初值。但可以将一个指针变量初始化为一个空指针。int*p=0;0是ASCII字符null的值。
将某个变量的地址作为函数的实参,相应的形参就是指针。调用函数不能改变实参指针变量的值,但可以改变实参指针所指向的变量的值。
指针名是一个变量,数组名是一个常量,指针名所代表的地址是可以改变的,而数组名不能。
指针变量p,数组名a;有p=a+1是合法的,而a=a+1是非法的。数组名可以使用指针形式,而指针变也量可以转化为数组形式。两个类型相同的指针相减表示它们之间相隔的数组元素数目。
字符串常量实质上是一个指向该字符串首字符的一个指针常量。调用函数printf(),以%s的格式输出字符串。如果要改变数组所代表的字符串,只能改变数组元素的内容,而要改变指针所代表的字符串,通常直接改变指针的值,使它指向新的字符串。通常定义指针char*s=NULL,初值置为空。
通过gets()函数读入一个字符串。
拆分实数:
/*拆分实数的整数与小数部分要求自定义一个函数void splitfloat(float x, int *inpart,flot*fracpart). 其中x是被拆分的实数,*input和*facpart分别是将实数x拆分出来的整数部分与小数部分。 编写主函数,并在其中调用函数splitfloat(). 试编写相应程序。*/ #include <stdio.h> void splitfloat( float x, int *intpart, float *fracpart ); int main() { float x, fracpart; int intpart; printf("Enter a number x:"); scanf("%f", &x); splitfloat(x, &intpart, &fracpart); printf("intpart= %d ", intpart); printf("fracpart= %f ", fracpart); return 0; } void splitfloat( float x, int *intpart, float *fracpart ) { *intpart = (int)x; *fracpart = x- (*intpart); }
循环右移:
/*循环右移:有n个整数,是前面各数顺序向后移m个位置,移出的数再从开头移入。编写 一个函数实现以上功能,在主函数中输入n个整数并输出调整后的n个数。试编写相应程序。*/ #include<stdio.h> void move(int*x,int n,int m); int main() { int i,m,n; int a[80]; printf("请输入n个整数:"); scanf("%d",&n); printf("请输入移动的长度: "); scanf("%d",&m); for(i=0;i<n;i++) scanf("%d",&a[i]); move(a,n,m); printf("输出移动后的数:"); for(i=0;i<n;i++) printf("%2d",a[i]); printf(" "); return 0; } void move(int*x,int n,int m) { int i,j,k; for(i=1;i<=m;i++){ k=x[n-1]; for(j=n-1;j>0;j--) x[j]=x[j-1]; x[0]=k; } }
删除字符:
/* 6.删除字符:输入一个字符串,再输入一个字符串ch,将字符串所有的ch字符删除后输出该字符串。 要求定义和调用函数delchar(s,c),该函数将字符串s中出现的所有c字符删除。试编写相应程序。*/ #include<stdio.h> void delchar(char *s,char c); int main(void) { char c; char s[80]; printf("Input the string:"); gets(s); printf("Input a ch:"); scanf("%c",&c); delchar(s,c); printf("result: "); puts(s); return 0; } void delchar(char *s,char c) { int i,j; i=j=0; while(s[i]!='