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

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

时间2025-07-16 18:02:30分类IT科技浏览4054
导读:普通变量和指针变量的区别 普通变量和指针变量都同为变量。对于一个变量来说,都具有值和地址两个属性。假设一个普通变量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排名的方法(提升搜索引擎排名)