示例代码:
输入一个数,存放到指针p所指定的内存地址中
- int a,*p;
- p=&a;
- printf("Please enter a number:\n",*p);
- scanf("%d",p);
- printf("*p=%d\n",*p);
使用指针操作数组
- int m[5],i,*pm;
- pm=m; //m的地址赋值给指针pm
- for(i=0;i<5;i++){
- *pm=i; //给指针赋值
- pm++; //下一个地址
- }
- pm=m;
- for(i=0;i<5;i++){
- printf("m[%d]=%d\n",i,*pm); //输出pm的值
- pm++;
- }
- -------------------------------------------------------------------------------------------------------
- int m[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
- printf("%d %d %d %d %d\n",m,*m,m[0],&m[0],&m[0][0]);
- //m,m[0],&m[0],&m[0][0],*m指的都是m的地址 0的地址
- printf("%d %d %d %d %d\n",m+1,*(m+1),m[1],&m[1],&m[1][0]);
- // m+1,*(m+1),m[1],&m[1],&m[1][0] 指的是第一行元素的地址4的地址
- printf("%d %d %d %d %d\n",m+2,*(m+2),m[2],&m[2],&m[2][0]);
- //m+2,*(m+2),m[2],&m[2],&m[2][0]指的是第二行元素的地址8的地址
- printf("%d %d\n",m[1]+1,*(m+1)+1);
- //m[1]+1,*(m+1)+1,指的是第一行第一个元素的地址 5的地址
- printf("%d %d\n",*(m[1]+1),*(*(m+1)+1));
- //*(m[1]+1),*(*(m+1)+1) 指的是第一行第一个元素的值5
- ---------------------------------------------------------------------------------------------
- static int m[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
- int (*p)[4];
- int i,j;
- p=m;
- for(i=0;i<3;i++)
- for(j=0;j<4;j++)
- printf("%3d ",*(*(p+i)+j));
- -------------------------------------------------------------------------------------------------
- int *max(int a,int b){ //指针函数:求最大值 返回最大值的地址
- int *p;
- if(a>b) p=&a;
- else p=&b;
- return p;
- }
- main(){
- printf("max=%d",*max(12,56)); //调用指针函数
- }
- ---------------------------------------------------------------------------------------------------------
- int min(int a,int b){
- if(a<b) return a;
- else return b;
- }
- main(){
- int (*pmin)(); //函数指针变量:存放一个函数的地址,函数名就代表函数的地址
- int x,y,z;
- pmin=min; //min()函数的地址赋值给函数指针变量
- printf("Please input two numbers:\n");
- scanf("%d %d",&x,&y);
- z=(*pmin)(x,y); //用指针变量调用min()函数
- printf("min_number=%d",z);
- }
- --------------------------------------------------------------------------------------------------------------
- int m[3][3]={1,2,3,4,5,6,7,8,9};
- int *pm[3]={m[0],m[1],m[2]}; //指针数组:数组的元素都是指针变量
- int *p=m[0];
- main(){
- int i;
- for(i=0;i<3;i++)
- printf("%d %d %d\n",m[i][2-i],*m[i],*(*(m+i)+i));
- for(i=0;i<3;i++)
- printf("%d %d %d\n",*pm[i],p[i],*(p+i));
- }
- -------------------------------------------------------------------------------------------------------------
- static int a[3][4];
- static int *p[3],**pp; // 二级指针:指向一级指针的地址
- //*p[3],一级指针,**pp指向*p的地址
- int i,j;
- p[0]=a[0];
- p[1]=a[1];
- p[2]=a[2];
- p[3]=a[3];
- pp=p;
- printf("please enter the number of a[3][4]:\n");
- for(i=0;i<3;i++)
- for(j=0;j<4;j++) scanf("%d",pp[i]+j);
- for(i=0;i<3;i++){
- for(j=0;j<4;j++) printf("%5d",*(*(pp+i)+j));
- printf("\n");
- }