首页IT科技c++指针怎么指向数组(C/C++基础知识——对指针的理解)

c++指针怎么指向数组(C/C++基础知识——对指针的理解)

时间2025-05-06 07:27:27分类IT科技浏览3169
导读:普通变量和指针变量的区别 普通变量和指针变量都同为变量。对于一个变量来说,都具有值和地址两个属性。假设一个普通变量a = 5,其值为5,&a为变量a在内存占有的地址。此时定义一个指针变量,并将a的地址赋值给该指针变量,int *p = &a,此时p指向a的地址空间,即p的值为a的地址,*p为p...

普通变量和指针变量的区别
  普通变量和指针变量都同为变量            。对于一个变量来说          ,都具有值和地址两个属性                。假设一个普通变量a = 5,其值为5                ,&a为变量a在内存占有的地址    。此时定义一个指针变量      ,并将a的地址赋值给该指针变量        ,int *p = &a               ,此时p指向a的地址空间         ,即p的值为a的地址      ,*p为p指向a的地址空间的内容               ,此时*p = 5         。而&p为指针p所在内存空间的地址            ,需要注意的是   ,虽然p指向a               ,但两者在同一内存所占有的地址并不相同                 。
可见如下代码:
1 //定义普通变量a和指针变量p 2 int main(){ 3 int a = 5; 4 int* p = &a; 5 printf("a = %d,&a = %d\n",a,&a); 6 printf("p = %d,*p = %d,&p = %d\n",p,*p,&p); 7 8 return 0; 9 }
运算结果如下:
多级指针
可先看如下代码:
1 int a = 10; 2 int* p = &a; //一级指针 3 printf("a = %d, &a = %d\n", a, &a); //a的值               ,a的地址 4 printf("p = %d\n", p); //p等价于&a 5 printf("*p = %d\n", *p); //*p等价于a 6 7 int** q = &p; //二级指针 8 printf("q = %d\n", q); //q是指针q的地址 9 printf("*q = %d\n", *q); //*q等价于p 10 printf("**q = %d\n", **q); //**q等价于*p等价于a 11 12 int*** t = &q; //三级指针 13 printf("t = %d\n", t); //t是指针t的指针 14 printf("*t = %d\n", *t); //*t等价于q 15 printf("**t = %d\n", **t); //**t等价于*q等价于p 16 printf("***t = %d\n", ***t); //***t等价于**q等价于*p等价于a
运算结果如下:
  看到这,想必对于任何一名C语言初学者来说            ,都会感到十分的疑惑——仅仅只是对“*          ”这么一个符号的增增减减                 ,却能够得到不一样的结果      。那么在不使用计算机的情况下   ,我们到底该怎么区分一级指针            、二级指针甚至是多级指针呢?在这里我们就得引入一个非常重要的概念——内存      。
内存
  内存是计算机组成中          ,用来暂存程序和数据                ,辅助CPU运算的一个重要的部分      ,可以说内存是CPU与硬盘沟通的桥梁                  。它能够暂存CPU的运算数据        ,也可以暂存与硬盘等外部设备交换的数据         。在下图中               ,我们可以很清楚的看到         ,内存在整个计算机系统中起到的关键性的作用(主存储器指内存)   。
  申明任何一个变量      ,都会在已分配的内存中               ,开辟出一块空间            ,根据不同的变量类型   ,开辟出的空间大小和形式是不一样的               ,比如说int型的变量               ,会在内存中开辟出一个4个字节的空间,char型的变量            ,会在内存中开辟出一个1个字节的空间;而对于申明一个整型数组                 ,如int a[10],则会在内存中开辟出一块4*10个字节且连续的空间                  。对于指针变量   ,它会指向变量对应的地址          ,那么这个地址到底该如何规定                ,这就得引入另一个概念——内存地址
内存地址
  计算机会对内存的每一个字节分配一个32位或64位的编号      ,(这与32位或者64位处理器相关)        ,这些内存编号我们称之为内存地址            。对于初学者               ,我们可以将内存抽象成一个很大的一维字符数组         ,每个单元都有其唯一的ID      ,这个ID就可以理解为内存地址。可见下图               。
  下面回归到多级指针               ,在了解到上述知识后            ,可对多级指针有了一个大致的理解               。我们将申明的多个变量抽象到下图中  。
  指针变量t的值是它在内存的相对地址   ,*t 等价于q               ,**t 等价于p               ,***t 等价于a,同理            ,指针变量q的值是它在内存的相对地址                 ,*q 等价于p   ,**q等价于a            。通过这种方式          ,我们可以很清晰明了地理解多级指针                。
声明:本站所有文章                ,如无特殊说明或标注      ,均为本站原创发布    。任何个人或组织        ,在未征得本站同意时               ,禁止复制                、盗用    、采集         、发布本站内容到任何网站                 、书籍等各类媒体平台         。如若本站内容侵犯了原著者的合法权益         ,可联系我们进行处理                 。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
洪湖SEO关键字优化(洪湖seo提升的方案)