指针:c语言的一种高级数据类型,指针的数据类型变量是用来存放其他变量的内存地址,达到间接访问另一个变量的目的;更加方便对数组和字符串的操作;以及函数调用中相互传递数据。
一:变量的指针
#include<stdio.h> int main() { int a,b,t,* p1,* p2,* p; p1 = &a; p2 = &b; //指针的读取,p1直接指向地址 scanf("%d",p1); printf("a=%d,a=%d ",a,* p1); //利用指针进行运算 b = 5; * p2= * p2 + 5; printf("b=%d,b=%d ",b,* p2); // 利用指针进行替换操作 p = p1; p1 = p2; p2 = p; printf("a=%d,b=%d ",* p1,* p2); return 0; }
二:数组指针
①一维数组
#include<stdio.h> #define N 5 int main() { int a[N],* p,i; int sum=0; float aver; p = a; //利用指针计算求和 for(i=0;i<N;i++){ scanf("%d",p+i); sum += * (p+i); } aver = sum*1.0 /N; //利用循环找大于平均值 for(i=0;i<N;i++){ if(* (p+i) > aver){ printf("%d bigger than aver ",* (p+i)); } } return 0; }
②二维数组
(1)通过列指针操作数组
#include<stdio.h> //采用列的方式处理二维指针 int main() { int i,j,a[2][3] = {{1,3,5},{2,4,6}},* p; p = &a[0][0]; for(i=0;i<6;i++){ printf("%d",*p++); } printf(" "); p = &a[0][0]; //当a[0][2]时,p+1将会指向第二行,即a[2][0] for(i=0;i<2;i++){ for(j=0;j<3;j++){ printf("%d",*p+i*3+j); } printf(" "); } return 0; }
(2)通过行指针操作数据
#include<stdio.h> //采用行的方式处理二维指针 int main() { int i,j,a[2][3] = {{1,3,5},{2,4,6}}; //在使用行指针的时候,必须指定每一行的元素个数,例如指定每行为3个元素 int (* p)[3]; p = a; for(i=0;i<2;i++){ for(j=0;j<3;j++){ printf("%d",*(*(p+i)+j)); } printf(" "); } return 0; }
三:字符串指针
①字符串数组
#include<stdio.h> int main() { char * s; s = "I love China!"; printf("%s ",s); return 0; }
②字符串的大小比较
#include<stdio.h> #include<string.h> int main() { const char *s1="aaa",*s2="bbb",*s3="ccc",*s; if (strcmp(s1,s2)<0){ s = s1; s1 = s2; s2 = s; } if (strcmp(s1,s3)<0){ s = s1; s1 = s3; s3 = s; } if (strcmp(s2,s3)<0){ s = s2; s2 = s3; s3 = s; } puts(s1); puts(s2); puts(s3); return 0; }
③字符串的复制
#include<stdio.h> #include<string.h> int main() { char a[10],b[10],*s1,*s2; s1 = a; s2 = b; gets(a); while(*s1){ * s2 = * s1; s2++; s1++; } *s2 = '