C指针(3)——指向指针的指针(程序讲解)

2018-12-04 07:12:49来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

int **q可以分成两部分,即int* 和 (*q),后面的 “q” 中的* 表示q是一个指针变量,前面的int*表示指针变量q只能存放int*型变量的地址。int** q表示为指针变量q只能存放int*型变量的地址。

4-1.c多维数组的定义

#include<stdio.h>
int main(void)
{
  int i,j;
  int data[2][3]={{1,2,3},{4,5,6}};    //定义二维数组data,2行3列;并对其进行初始化
  printf("data[2][3]:\n");
   for(i=0;i<2;i++)
    {
      for(j=0;j<3;j++)
         {
           printf(" %d",data[i][j]);  
         }
      printf("\n");
     }
  return 0;
}  

上例子为(a)

      结果(a):

data[2][3]:
 1 2 3
 4 5 6  

对(a)进行修改:数组 int data[2][3];  只定义不赋值。

     结果(b):

data[2][3]:
 -858993460 -858993460 -858993460
 -858993460 -858993460 -858993460  

对(a)进行修改:数组 int data[2][3]={{1,2,3}};

    结果(c):

data[2][3]:
 1 2 3
 0 0 0

对(a)进行修改: printf(" %d",&data[i][j]);

       结果(d):

 data[2][3]:
 2227836 2227840 2227844
 2227848 2227852 2227856

 

4-2.c指针的指针 

#include<stdio.h>
int main(void)
{
  char *name[]={"Fujian","Huian"};  //定义指针数组name,并对其进行初始化
  char **p_name;                    //定义指针的指针p_name
  printf("name[0]:%p\n",name[0]);   //输出指针数组元素name[0]的值,这里是第一个字符串的首地址
  printf("name[1]:%p\n",name[1]);
  printf("\n");
  p_name=&name[0];                  //把name[0]的地址赋值给p_name,即p_name指向name[0],因为name[0]的内容是地址,所以p_name是指向地址的指针变量,即指针的指针
  printf("&name[0]:%p\n",p_name);   //输出p_name的值,即name[0]的地址
  p_name=&name[1];
  printf("&name[1]:%p\n",p_name);
  return 0;
}

  两个地址:前一个是指针变量的内容(为一个地址),即被指针变量指向的数据的地址;

         后一个是指针变量本身的地址,这个地址就是指针的指针的内容。

结果:

name[0]:000E5788
name[1]:000E5780 

&name[0]:002EF854
&name[1]:002EF858

4-3.c

#include <stdio.h>
int main(void)
{
  char *name[ ]={"Fujian","Quanzhou"};
  char **p_name;
   int i;
  p_name=name;
  for(i=0;i<2;i++)
  {
       printf("%s",*(p_name+i));
   }
    printf("\n");
    return 0;
}

  

补充指针,就是地址;指针变量就是存储地址的变量。

         对于多维数组int data[2][3] ; 2行3列,二维数组可以理解为一维数组的嵌套。

         可以理解为:

      • data是一个一维数组,包含  data[0],data[1]   2个元素
      • 而 data[0] 又是一个一维数组,包含  data[0][0],data[0][1],data[0][2]  3个元素
      • data是 data[0],data[1]  的数组名,所以数组名 data是data[0] 的地址
      • data[0]是数组  data[0][0],data[0][1],data[0][2] 的数组名,数组名是首元素的地址,所以data[0]是data[0][0]的地址 
      • 对于一维数组 a[ ] ,则有 a[i] 相当于 *[a+i]    
      • 对于二维数组data[ ][ ],则有data[i][j] 相当于*(data[i]+j)  或者 *data(*(data+i)+j)       

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:C语言学习记录

下一篇:C指针(4)——数据结构中指针的应用(非常重要)