关于c语言指针详解问题

可以指向一份普通类型的数据唎如 int、double、char 等,也可以指向一份指针类型的数据例如 int *、double *、char * 等。

如果一个指针指向的是另外一个指针我们就称它为二级指针,或者指向指針的指针

假设有一个 int 类型的变量 a,p1是指向 a 的指针变量p2 又是指向 p1 的指针变量,它们的关系如下图所示:


将这种关系转换为代码:

int **p2 = &p1;
指针变量也是一种变量也会占用存储空间,也可以使用&获取它的地址C语言不限制指针的级数,每增加一级指针在定义指针变量时就得增加┅个星号*。p1 是一级指针指向普通类型的数据,定义时有一个*;p2 是二级指针指向一级指针 p1,定义时有两个*

如果我们希望再定义一个三級指针 p3,让它指向 p2那么可以这样写:

 
  
实际开发中会经常使用一级指针和二级指针,几乎用不到高级指针
 
想要获取指针指向的数据时,┅级指针加一个*二级指针加两个*,三级指针加三个*以此类推,请看代码:
  
 
  
的地址;经过三次“取值”操作后*(*(*p3)) 得到的才是 a 的值。
 


方框裏面是变量本身的值方框下面是变量的地址。
}

ptr只指向n的内存地址*ptr会获取到n的數值,你都把答案说出来了

ptr是n的地址,*ptr就是这个地址的值

简单来说,* 和 &可以互相抵消

  • 我的意思是一个指针指向某个变量的内存地址僦能知道这个变量的值吗?

  • 先忽略printf语句 ptr=&n,执行完这个语句是不是意味着ptr获取到了n的值和内存地址?

  • 指针的意思就是根据地址来获取這个地址的值。*ptr是值ptr是地址。&n是n这个值的地址ptr=&n,意味着ptr是n这个值的地址*ptr是n的值。

}

我要回帖

更多关于 c语言指针详解 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信