博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++指针和数组的区别(不能混用的情况)
阅读量:6993 次
发布时间:2019-06-27

本文共 1082 字,大约阅读时间需要 3 分钟。

通常情况下,C++中指针和数组是可以混用的,但是,在编写字符数组的全排列的时候,混用却出了问题,因此,今天特地mark一下,以备日后查找

 这里整理的,不包括用new开辟的动态数组

1.数组一旦声明,我们就不能再给它赋值,但是我们可以给指针赋值

如下:

5、6行都错,因为数组s不能作为左值被赋值

报错阶段:程序会在编译时报错

1 int main(){2     char s[]="123";3     char p[]="123";4     char *t=NULL;5     s=t;6     s=p;7 }

 

2.用指针定义字符串时,指针所指的字符串会被理解为常量字符串,不能修改。数组定义的字符串则可以修改。

如下:例子中用swap对指针进行修改,比较 s 和 s1 的不同

结果:s1的结果能够正确输出,但是程序会在swap交换s的元素时,在i=j这一句挂掉。

原因即为上面所说,指针声明的字符串是常量的。

报错阶段:程序运行时直接挂掉

1 void swap(char &i,char &j){ 2     char t=i;i=j;j=t; 3 } 4 int main(){ 5     char *s="1234"; 6     char s1[]="1234"; 7     swap(s1[0],s1[2]); 8     printf("%s\n",s1); 9     swap(s[0],s[2]);10     printf("%s\n",s);11 }

在vs上调试可以看到报错为:

 

 

 3.用sizeof运算符可以计算数组变量的数组大小,但指针指向数组时,只能计算出指针本身大小(单位:字节)

1 int main(){2     char *s="1234567890";3     char s1[]="1234567890";4     printf("s:%d  s1:%d  char:%d",sizeof(s),sizeof(s1),sizeof(char));5 }

 

运行结果:s:8  s1:11  char:1

注意,字符串的结束符'\0'也被sizeof计算在内,因此字符串类型比内容长1,如果是其他基本类型,则sizeof(数组名)/sizeof(类型名)即为数组长度。

 其他的问题,可以参考这个:

更多的区别,待我有空拜读了《C专家编程》之后,再来解决喽

ok~暂时就发现了这么多,拜拜(●'◡'●)

转载于:https://www.cnblogs.com/luruiyuan/p/5616379.html

你可能感兴趣的文章
js 数组的操作
查看>>
工作找到,已经上班,随笔写下……
查看>>
cURL 学习笔记与总结(1)概念
查看>>
linux有用技巧:使用快照制作虚拟机
查看>>
观察者模式
查看>>
Eclipse --Type /com.xx.app/gen already exists but is not a source folde解决方案
查看>>
JavaScript语言精粹--replace()与正则
查看>>
linux内存管理---物理地址、线性地址、虚拟地址、逻辑地址之间的转换
查看>>
SQL 设计心得、逗号分隔列表
查看>>
openwrt web管理luci界面修改
查看>>
SQL Server 存储(5/8):理解IAM 页
查看>>
Android 资源保护问题——探索
查看>>
Android File Hierarchy : System Structure Architecture Layout
查看>>
腾讯2014年实习生招聘笔试面试经历
查看>>
把Jar文件转成exe安装文件
查看>>
不浮躁,获取充实感
查看>>
JavaScript中产生标识符方式的演变
查看>>
Pyqt 国际化多语言支持
查看>>
AC自己主动机 总结
查看>>
NuGet的几个小技巧
查看>>