指针=&变量*指针=指针指定的变量的值 #include<stdio.h>
int main1(){int *p,a=88; //指针 要与指向的变量 类型相同 p=&a; //使指针与变量所关联 printf("%dn",*p); //指针指定的变量的值 *p=123;//指针指定的变量的值可以参与运算影响本身的值 printf("%dn",a); //指针指定的变量的值 int *r; r=p;//指针的值也是可以说转换的;此时r也指向A printf("%d",*r);
} 指针=&数值名[某数]
*指针= 指针指定的变量的值
指针+i=&数值名[某数+i]int main2(){int *a,*b,c[3]={1,2,3};a=&c[0];b=&c[1];printf("%dn",*a);printf("%dn",*(a+1));printf("%dn",*(a+2));printf("%dn",*(b-1));}&数组名[某数] 相当于 数组名+某数数组名[某数] 相当于 *(数组名+某数) int main(){int i,a[3]={1,2,3},*q;q=a+1; //== q=&a[1]printf("%dn",*q);q=a;//首地址开始 printf("%dn",*q);int b;b=*(a+2); // b=a[2]printf("%dn",b);printf("%dn",a[2]);}数组名[]->*p
数组名[i]->*(p+i)
数组名->q(使用前需先关联)指针变量与二维数组 指针=&数组名[数a][数b]
*指针=指针指定变量的值
指针+i=&(数组名[数a][数b]后面第i个元素)&数组名[数a][数b] 相当于 数组名[数a]+数b也相当于 数组名[0]+数a*列数+数b数组名[数a][数b]相当于 *(数组名[0]+数a*列数+数b) #include<stdio.h>
int main(){int a[3][4]={1,2,3,4,5,6,6,5,4,3,2,1};int *p;
// p=&a[0][0];p=a[0]+0;printf("%dn",*p);p=a[0]+1*4+0;printf("%dn",*p);printf("%dn",*(a[0]+2*4+3));int i; for(i=0;i<12;i++){printf("%2d",*p++);}return 0;}指针变量与二维数组相关函数行参是指针变量 实参是数组名函数声明 数组名[][某数]->*p
函数解释 数组名[i][j]->*(p+i*列数+j)
函数使用 数组名->*数组名 #include<stdio.h>
int main(){int a[3][4]={1,2,3,4,5,6,6,5,4,3,2,1};void fun(int *p,int n);fun(*a,12);for(int i=0;i<3;i++)for(int j=0;j<4;j++){printf("%2d",a[i][j]);}return 0;
}
void fun(int *p,int n){for(int i=0;i<3;i++)for(int j=0;j<4;j++){printf("%2d",(*p)+1);p++;}printf("n");}行参是指针变量 实参是指针变量 函数声明 数组名[][某数]->*p
函数解释 数组名[i][j]->*(p+i*列数+j)
函数使用 数组名->q(使用前需要关联) #include<stdio.h>
int main(){int a[3][4]={1,2,3,4,5,6,6,5,4,3,2,1};void fun(int *p,int n);int *p;p=a[0]; fun(p,12);for(int i=0;i<3;i++)for(int j=0;j<4;j++){printf("%2d",a[i][j]);}return 0;
}
void fun(int *p,int n){for(int i=0;i<3;i++)for(int j=0;j<4;j++){printf("%2d",(*p)+1);p++;}printf("n");
} 指针变量指向二维数组的行变量 //定义 (*p)[列数] int (*p)[4]
//关联 p=二维数组名+n p=a+1;
//
// 等于
//*(*(p+i)+j)=二维数组名[n+i][j];
//例如 a[2][2]==*(*(p+2)+2)
//
#include<stdio.h>
int main(){int a[3][4]={{1,2,3,4},{5,6,6,5},{4,3,2,1}};int (*p)[4];p=a;int i,j;sacnf("%d%d",&i,&j);printf("%d",*(*(p+i)+j));// for(i=0;i<4;i++){
// printf("%dt",*(*(p+2)+i));
// }return 0;
}//用指向二维数组行变量的指针变量做形参
//函数声明:数组名[][某数]->(*p)[某数]
//函数解释:数组名[i][j]->*(*(p+i)+j)#include<stdio.h>
int main(){int a[3][4]={1,2,3,4,5,6,6,5,4,3,2,1};void fun(int (*p)[4],int n);fun(a,2); //关键 return 0;
}
void fun(int (*p)[4],int n){ //关键 for(int j=0;j<4;j++){printf("%2d",*(*(p+n-1)+j)); }printf("n");}指针变量与字符串指针=&数组名[某数]
*指针=指针指定的字符
指针+i=&数组名[某数+i]
//指针变量与字符串
//指针=&数组名[某数]
//*指针=指针指定的字符
//指针+i=&数组名[某数+i]//&数组名[某数] 相当于 数组名+某数
// 数组名[某数] 相当于 *(数组名+某数)#include<stdio.h>
int main(){char a[100]={"i am shuaibi"};char b[100];char *p;p=a+0; //&a[0]==a+0int i=0;while(*p!='