【c】多级指针

一.一级指针

1.int *p,*p2;

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

一个错误的示范

用指针创建动态数组,需要分配空间。
一维数组
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);//一级指针所在地址申请内存

猜你喜欢

转载自www.cnblogs.com/SeasonBubble/p/10725683.html