一.一级指针

1.int *p,*p2;

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

p是变量名,*表明是指针,指针指向地址。

在定义时初始化,如int *p_2 = &b; //定义一个指针,指针指向一个地址

先定义再初始化,如int *p1; p1 = &a;//定义了一个指针,用这个变量名去赋值

*p1是p1所指向的变量的值

 

为a赋值
#include <stdio.h> int m = 3; void usepo(int *a){ *a=2;//输出a=2 *a =m;//输出a=3 a=&m;//输出a=0 ? } int main(){ int a; usepo(&a); printf("%d",a); }
用指针交换两个数的值
void
swap(int *xx,int *yy){ int *temp; temp=xx; xx=yy; yy=temp; }/*主函数中用swap(&x,&y)调用*/


失败,因为虽然参数是指针,但是作为参数的指针是临时复制的,在函数里互换操作的是临时指针而不是指针指向的内容

只是在子函数里创建了两个数的副本,仍没有改变源数。
void swap(int xx,int yy){
int temp;
temp=xx;
xx=yy;
yy=temp;
}/*主函数中用swap(x,y)调用*/
和这种调用本质一样

成功改变数的值
void
swap(int *xx,int *yy) { int temp; temp=*xx; *xx=*yy; *yy=temp; }

 

2.与数组相关

#include <stdio.h> 
void usepo(int *a){
  for(int i=0;i<10;i++){
      a[i]=i;  //或*(a+i)=i;
  }

}
int main(){
    int a[10];
    //a=&a[0](数组首地址),&a=int (*)[10](数组地址) 
    usepo(a);
    for(int i=0;i<10;i++)
    printf("%d ",a[i]);
} //正常输出0 1 2 3 4 5 6 7 8 9

 

一个错误的示范

 【c】多级指针 随笔

 

用指针创建动态数组,需要分配空间。 一维数组
int *p;
    p = (int*)malloc(m*(sizeof(int)));//动态申请内存
二维数组
int **p;
p = (int**)malloc(m*(sizeof(int*)));//二级指针所在地址申请内存
int i, j; for (i = 0; i<m; i++)
p[i] = (int*)malloc(sizeof(int)*n);//一级指针所在地址申请内存

 

用三级指针传递二维数组指针地址创建二维动态数组(迷宫问题)
int **maze=NULL;
initMAZE(&maze);
void initMAZE(int ***maze){
   srand(time(NULL));
    int i,j;
    int x,y;//读入x,y 
    int **typeM; 
    scanf("%d %d",&x,&y);
    //为二级模板数组申请空间 
    typeM = (int **)malloc(sizeof(int*)*(x+2));
      for (int r=0;r<=x+1;r++)
      typeM[r]=(int *)malloc(sizeof(int)*(y+2));
    //迷宫赋值 
    for (i = 0; i<=x; i++)
       {
       for (j = 0;j<=y;j++){
               typeM[i][j]=(int)rand()%2; 
         }    

    }
 
    for (i = 0; i <=x; i++){
   typeM[i][0]=1;
   typeM[i][x]=1;
    
    }
    for (j = 0;j<=y;j++){
        typeM[0][j]=1;
        typeM[x][j]=1;
        
    }
//保证入口出口是可走的 
    typeM[1][1]=0;
    typeM[x-1][x-1]=0;
    *maze = typeM;

} 

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄