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

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

时间2025-08-30 19:08:08分类IT科技浏览4766
导读:普通变量和指针变量的区别 普通变量和指针变量都同为变量。对于一个变量来说,都具有值和地址两个属性。假设一个普通变量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
python webapi框架(Python 高性能 web 框架 – FastApi 全面指南) 正则表达式生成器字母接数字(正则的扩展详解)