admin 管理员组文章数量: 887031
c++,数组与指针的差别
c++中指针与数组的区别:
数组只能在静态存储区被创建(全局数组),或在栈上创建(临时数组);
数组名对应一块内存,其地址和容量在生命周期内保持不变,只有内容可改变。
指针可以随时指向任意内存的内存块,特征是“可变”。
数组和指针修改内容时的不同:
char a[] = “hello”;
a[0] = ‘X’;//这个没问题。
这段语句表示:创建一个字符串并赋值为hello,修改字符串的第一个字符,没有问题。
char *p = “hello”;
p[0] = ‘X’;//这是个错误,有的编译器可能发现不了。
这段语句表示:用一个指针指向常量字符串“hello”,修改字符串的第一个字符时,在编译器中直接出现的常量字符串都会自带const,编译器在这个修改语法上不会发现有什么问题,但在运行时,就会因试图修改const常量而导致运行错误。
上面那种用法编译器会在初始化时就会报错:
数组和指针在内容复制和比较时的不同:
数组:
数组名无法直接进行比较,想要将数组a的值复制给数组b,使用b=a会产生编译错误,应该用标准库函数strcpy进行复制。
想要判断数组a和b的内容是否相同,使用if(a == b)会产生编译错误,应该使用标准库函数strcmp进行比较。
指针:
指针p = a不会将数组a复制到p,而是将a的首地址给p,指针复制需要申请一片大小与目的数组相等的内存,使用strcpy对指针名和数组名进行复制。
指针比较,使用strcmp比较两个指针名就可。
因此用字符串指针时,初始化不应该用p = "hello"这样的操作,而应该使用strcpy,或者for循环挨个赋值,或者其他赋值方法,而不应该用直接指向常量字符串的方法。
数组与指针内存容量上的不同:
数组的字节数sizeof()为其类型字节数和长度的乘积。
指针的字节数sizeof()为一个指针的字节数,即4。
c/c++语言无法获取到指针所指的内存容量,除非在申请内存的时候记住它。
当数组作为函数的参数进行传递时,数组将自动退化为同类型的指针,所以传入数组做参数时一般需要将其长度也作为参数传入,传入的数组想要查看其sizeof时值为4。
版权声明:本文标题:c++,数组与指针的差别 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1686955261h50526.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论