热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数组名和指针有什么不同?

char*ss10123456789;charss2[]0123456789;sizeof(ss1)为4,sizeof(ss2)为11,为什么?数组名不就
char* ss1 = "0123456789";
char ss2[] = "0123456789";
sizeof(ss1) 为4,
sizeof(ss2)为11,
为什么?
数组名不就是一个指针吗?
为何sizeof(ss2)不是4呢?

11 个解决方案

#1


ss1是指针类型,ss2是数组类型,直接填数组名编译器会把数组首地址传过去~~

#2


sizeof数组返回的是数组的里面元素的字节数

#3


引用 1 楼 csdn1223537114 的回复:
ss1是指针类型,ss2是数组类型,直接填数组名编译器会把数组首地址传过去~~

意思就是它们两个完全是两种类型吗?
但是数组名不就是一个指向数组第一个元素的指针吗?

#4


数组名不是指针!!
说数组名是指针的都是错的
你从sizeof就发现他们的不同了
数组名和指针的联系是数组名可以退化成指针(退化后数组大小就丢失了),反之不成立

#5


引用 4 楼 paschen 的回复:
数组名不是指针!!
说数组名是指针的都是错的
你从sizeof就发现他们的不同了
数组名和指针的联系是数组名可以退化成指针(退化后数组大小就丢失了),反之不成立

谢谢!
我也看了另外一个帖子:
http://bbs.csdn.net/topics/390800454
觉得大体明白了明白了它们并不是同样的东西。
应该要结贴了。

#6


虽然在效果上数组名可以等同于指向数组的指针,但是在本质上它和实际的指针是有区别的。首先,数组名只是一个符号,系统不会为它分配任何空间。其次,数组名是一个常量,它不能作为左值进行运算(自增和自减也是不允许的)。而实际指针没有这方面的限制。

#7


引用 6 楼 ghx287524027 的回复:
虽然在效果上数组名可以等同于指向数组的指针,但是在本质上它和实际的指针是有区别的。首先,数组名只是一个符号,系统不会为它分配任何空间。其次,数组名是一个常量,它不能作为左值进行运算(自增和自减也是不允许的)。而实际指针没有这方面的限制。

这样,多谢。

#8


谢谢各位的帮助,我结贴了。

#9


数组名和指针的关系,是在表达式中体现的。
sizeof运算符,是个编译期运算符,这个运算符作用于数组名,
是求数组的占用内存单元的数量
这个表达式是个常量表达式(有些实现支持变量定义数组的大小,这种实现中不是常量表达式)
另外一处,就是 &运算符和数组名构成的表达式,这个表达式中,
&a表示数组a的地址,而不是数组名作为指针的地址


程序中并没有储存表示数组首地址的指针。
取到的不是指针的地址。

C++中,函数的数组引用参数,可以匹配数组,
所以C++中数组名,表达式中,就表现为指针,数组全体对象,两种不同形态。
C中,就没有这么复杂,除了 sizeof(a) ,&a 中表示数组全体对象外,别的表达式中,通常表现为指针

#10


编译器会自动把数组的首地址传递过去,但数组和指针还是有区别的

#11


数组不是指针 ,数组和指针只有作为函数行参的时候编译器才将两者视为一样的,因为编译器都会将数组的操作转换成对指针的操作,其他地方数组是数组,指针是指针

推荐阅读
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
author-avatar
梦天使悠然
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有