首页 > 其他 > 详细

【c】多级指针

时间:2019-04-17 20:13:16      阅读:141      评论:0      收藏:0      [点我收藏+]

一.一级指针

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);//一级指针所在地址申请内存

 

【c】多级指针

原文:https://www.cnblogs.com/SeasonBubble/p/10725683.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!