指针数组和二级指针
1 #include<stdio.h> 2 3 int main(){ 4 int a[5] = {1,3,5,7,9}; 5 int *p[5], i; 6 int **pp = p; 7 //使p指针数组指向每一个a 8 for(i = 0 ; i < 5 ; i++){ 9 p[i] =&a[i]; 10 } 11 //【】优先级高于* ,*(p[i]) p[i] = &a[i],so==> *p[i] = *&a[i] = a[i] 12 for(i = 0 ; i < 5 ; i++){ 13 printf("%d ",*p[i]); 14 } 15 printf("\n"); 16 //p 和 pp都是二级指针,i=0时,*pp=p[0] ,p[0]=&a[i],*pp=a[0]. 17 //执行pp++之后,pp指向p[1],*pp=p[1],p[1]=&a[1]. 18 for(i = 0 ; i < 5 ; i++,pp++){ 19 printf("%d ",**pp); 20 } 21 22 return 0 ; 23 } 24 output: 25 1 3 5 7 9 26 1 3 5 7 9
指针与数组的 关系
1 nclude<stdio.h> 2 3 int main(){ 4 int a[2][5] = {1,3,5,7,9,2,4,6,8,10}; 5 //表示p是一个指针,指向含有五个元素的一维数组 6 int (*p)[5],i; 7 //p指向二维数组得第一行 8 p = a ; 9 //p=a 之后 , p=&a , *p = a[1]. 10 //p是一个数组指针 11 for(i = 0 ; i < 5 ; i++){ 12 printf("%d ",(*p)[i]); 13 //(*p)[i] 是先取p的内容作为数组的起始地址,然后再去第i个元素。 14 //*p[i]是先取以p为起始地址的第i个元素,该元素为指针,然后取该指针的内容。 15 } 16 printf("\n"); 17 //p移动到第二行 18 p++; 19 for(i = 0 ; i < 5 ; i++){ 20 printf("%d ",(*p)[i]); 21 } 22 printf("\n"); 23 24 return 0; 25 } 26 27 int (*p)[5] ;//一个指针 28 int *p[5] ; //含有五个元素的数组,长度为5,数组中得每一个元素指向一个整型变量。
函数和指针
1.指针作为函数得参数
作用是将一个变量的地址传送到一个函数中
1 #include<stdio.h> 2 void change(int i , int *p){ 3 i++; 4 if(p != NULL){ 5 (*p)++;//根据地址找到变量b,b+1 6 } 7 } 8 int main(){ 9 int a = 5 , b = 10 ; 10 change(a,&b); 11 printf("a=%d,b=%d",a,b); 12 return 0; 13 }
2.返回指针得函数
1 int *f(int i , int j);
() 的优先级高于 *
表示 f是一个函数,函数名前有一个指针,表示此函数得返回值类型为指针。
1 include<stdio.h> 2 //定义一个名称为name得指针数组,每个数组元素都指向一个字符串 3 char *name[7] = {"monday","tuesday","wednessday","thursday","friday","saturday","sunday"}; 4 //定义一个指针,这个指针指向一个字符串 5 char *message = "wrong input"; 6 //返回指针的函数 7 char *week(int day){ 8 if(day < 0 || day > 7){ 9 return message ; 10 }else{ 11 return name[day-1] ; 12 } 13 } 14 15 16 int main(){ 17 int day ; 18 char *p; 19 20 printf("input a number of a week:\n"); 21 scanf("%d",&day); 22 23 p = week(day); 24 printf("%s\n",p); 25 26 return 0; 27 }
3.指向函数得指针 87页----------
时间: 2024-11-06 02:34:14