加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱资讯网 (https://www.52junxun.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

清楚的认识指针(C语言)

发布时间:2022-10-31 12:42:22 所属栏目:PHP教程 来源:
导读:  一、指针: 1、指针是什么?

  指针就是地址,地址也叫指针

  2、指针变量是什么?

  用来存放地址(指针)的变量我们称为指针变量

  3、指针大小

  指针(地址):在32位下占4个字节
  一、指针: 1、指针是什么?
 
  指针就是地址,地址也叫指针
 
  2、指针变量是什么?
 
  用来存放地址(指针)的变量我们称为指针变量
 
  3、指针大小
 
  指针(地址):在32位下占4个字节php指针,在64位下占8个字节
 
  指针变量:在32位下占4个字节,在64位下占8个字节
 
  上代码
 
  #include
  int main()
  {
   char b='v';
   int c=20;
   char* p=&b; //字符型指针变量里面存放的是字符变量的地址
   int* a=&c;//整型指针 里面存放的是整型变量的地址
  
   //指针变量的大小
   printf("char* p:%d\n",sizeof(p));
   printf("int* a:%d\n",sizeof(a));
  
   //指针(地址)的大小
   printf("char类型 &b:%d\n",sizeof(&b));
   printf("int类型 &c:%d\n",sizeof(&c));
  
   return 0;
  }
  二、数组指针
 
  1、数组指针:是指针,指向数组的指针,可以用指针访问数组的每一个元素
 
  2、指针与数组的访问方式相通:
 
  1>可用指针加下标的方式访问
 
  2>可用指针加步长再进行解引用的方式访问
 
  3、指针与数组没有任何关系
 
  上代码
 
  #include
  #include
  int main()
  {
   //数组指针
   char a[]="shu zu zhi zheng";
   char(* p)[]=&a;//里面存放的是整个数组的地址
   //p与 *先结合,所以是指针,指向数组的指针
  
   printf("%s\n",*p);
   //将数组指针解引用操作得到的是整个数组
   //以指针的方式打印出整个数组元素;
  
    
   int arr[5]={1,2,3,4,5};
   int* q=arr; //让指针指向数组的首元素
   int i=0;
   int s=sizeof(arr)/sizeof(arr[0]);//计算数组的元素个数
   for(i=0;i
  三、函数指针
 
  1、函数指针:指向函数的指针,指针变量里面存放的是函数的地址
 
  上代码
 
  #include
  #include
  void fin()
  {
   printf("fin函数调用成功!\n");
  }
  int Max(int a,int b)
  {
   printf("Max函数调用成功\n");
   int max=a;
   if(b>max)
   {
   max=b;
   }
   return max;
  }
  int main()
  {
   //函数指针,函数的返回值 跟形参类型都不可省略
   void (*p)()=fin; //定义了一个函数指针
   (*p)(); //以指针的方式调用函数(方法一)
   p();//以指针的方式调用函数(方法二)
  
   int (*q)(int,int)=Max;//函数名代表的是整个函数的地址
  
   //方法一
   int max=(*q)(10,30);
   printf("其最大值为:%d\n",max);
  
   //方法二
   int s=q(10,30);
   printf("其最大值为:%d\n",s);
  
   return 0;
   }
  四、结构体指针
 
  1、结构体指针:就是指向结构体变量的指针
 
  2、可通过指针的方式访问结构体成员变量(指针->成员变量)
 
  上代码
 
  #include
  struct ag{
   int a;
   char b;
   float c;
  };
  int main()
  {
   //定义结构体变量并初始化
   struct ag s1={10,'b',3.14};
  
   //定义结构体指针并让其指向结构体变量s1;
   struct ag* p=&s1;
  
   //通过指针的方式访问结构体成员变量
   printf("%d %c %.2f\n",p->a,p->b,p->c);
   p->a=20; //通过指针的方式改变成员变量的值
   printf("%d %c %.2f\n",p->a,p->b,p->c);
  
   struct ag s2;
   struct ag* q=&s2;
   scanf("%d %c %f",&q->a,&q->b,&q->c);//给结构体成员变量写入值
   printf("%d %c %.2f\n",q->a,q->b,q->c);
  
   return 0;
   }
  五、二级指针
 
  1.二级指针:指向一级指针
 
  2、二级指针变量:存放一级指针的地址
 
  上代码
 
  #include
  #include
  int main()
  {
   int a=10;
   int b=48;
   printf("b的内容:%d\n",b);
   int* p=&a;
   printf("%d\n",*p);
   *p=20;//通过指针的方式改变a的内容
   printf("%d\n",*p);
  
   int** q=&p;//二级指针里面存放的是指针p的地址;
   printf("%d\n",**q); //二级指针解引用两次就能得到a的内容
   **q=30;//通过指针的方式改变a的内容
   printf("%d\n",**q);
  
   *q=&b;//改变一级指针的内容使其指向b
   printf("b的内容:%d\n",b);
  
   return 0;
  }
 

(编辑:我爱资讯网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!