指针
1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 #include <cstring> 5 using namespace std; 6 void f(int *a,int *b){ 7 int c; 8 c=*a;*a=*b;*b=c; 9 } 10 int main() 11 { 12 int x=3,y=5,*p=&x,*q=&y; 13 //f(p,q); 14 //f(&x,&y); 15 //2个f都可以交换x,y. 16 printf("%d%d",x,y); 17 }
void f(int *p){ p=p+1; } int main() { int x=1,*r=&x; f(r);printf("%d\n",x); } 1 1 void f(int *p){ *p=*p+1; } int main() { int x=1,*r=&x; f(r);printf("%d\n",x); } 1 2
/* 第 95 题 假定输入的字符串中只包含字母和*号。请编写函数 fun,它的功能是:使字符 串的前导*号不得多于 n 个;若多于 n 个,则删除多于的*号;若少于或等于 n 个,则什么 也不做。字符串中间和尾部的*号不删除。 */ char a[50]; int n; void fun(char *a, int n) { char *t =a; int k=0; while(*t=='*'){ k++; t++; } t=a; if(k>n){ t=a+k-n; } int i=0; while(*t){ a[i]=*t; i++; t++; } a[i]='\0'; } int main(){ scanf("%s",a); scanf("%d",&n); fun(a,n); printf("%s\n",a); }
1 第 94 题 规定输入字符串中只包含字母和*号。请编写函数 fun,它的功能是:将函数字 2 符串中的前导*号全部删除,中间和尾部的*号不删除。 3 4 void fun(char *a) 5 { 6 7 char *t =a; 8 int k=0; 9 while(*t=='*'){ 10 k++; 11 t++; 12 } 13 t=a+k; 14 int i=0; 15 while(*t){ 16 a[i]=*t; 17 i++; 18 t++; 19 } 20 a[i]='\0'; 21 }
/* 第 88 题 假定输入的字符串中只包含字母和*号。请编写函数 fun,它的功能是:除了字 符串前导的*号之外,将串中其他*号全部删除。在编写函数亚时,不得使用 c 语言提供的字 符串函数。 */ void fun(char *a) {int i=0; char *p=a; while(*p&&*p=='*') {a[i]=*p; i++; p++;} while(*p) {if(*p!='*') {a[i]=*p; i++;} p++;} a[i]='\0';}
/* 假定输入的字符串中只包含字母和*号。请编写函数 fun,它的功能使:将字符 串尾部的*号全部删除,前面和中间的*号不删除。 */ void fun(char *a) { char *p,*q; p=q=a; while(*p) p++; p--;//最后一个 while(*p=='*') p--; int i =0; while(q<=p){ a[i]=*q; i++; q++; } a[i]='\0'; }
/* 已知学生的记录由学号和学习成绩构成,n 名学生的数据已存入 a 结构体数组 中。请编写函数 fun,该函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规 定只有一个最低分)。 */ void f(stu a[],stu *s){ int i,min; min=a[0].s; for(int i=0;i<5;i++){ if(a[i].s>min){ min=a[i].s; *s=a[i]; } } } stu a[5],st; int main() { for(int i=0;i<5;i++){ a[i].s=i; } stu *ss =&st; f(a,ss); printf("%d\n",st.s); return 0; }
假定输入的字符串中只包含字母和*号,请编写函数 fun,它的功能是:除了字 符串前导和尾部的*号之外,将串中其他*号全部删除。形参 h 已指向字符串第一个字符,形 参 p 已指向字符串中最后一个字母。在编写程序时,不得使用 c 语言提供的字符串函数。 // h 尾,q 首 void fun(char *s,char *h,char *q,char *t){ int i=0,j=0; while(*q){ if(*q=='*'){ i++; q++; } else break; } while(*h){ if(*h=='*'){ j++; h--; } else break; } printf("%d %d\n",i,j); int cnt=0; for(int k=i;k<strlen(s)-j;k++){ if(s[i]!='*'){ t[cnt]=s[k]; cnt++; } } } int main() { scanf("%s",s); char *p=s; char *q=s; char *h; while(*p){ p++; } p--; h=p; fun(s,h,q,t); printf("%s\n",t);
1 p:指针 2 p->num 和(*p).num 等价