C++指针和数组的区别(不能混用的情况)
通常情况下,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专家编程》的笔记-指针与数组的区别
更多的区别,待我有空拜读了《C专家编程》之后,再来解决喽
ok~暂时就发现了这么多,拜拜(●'◡'●)
转载于:https://www.cnblogs.com/luruiyuan/p/5616379.html
C++指针和数组的区别(不能混用的情况)相关推荐
- char *a 和char a[] 的区别(指针和数组的区别)
2019独角兽企业重金招聘Python工程师标准>>> 在C/C++中,指针和数组在很多地方可以互换使用,这使得我们产生一种错觉,感觉数组和指针两者是完全等价的,事实上数组和指针是有 ...
- 指针数组、数组指针、数组的区别与联系
指针数组.数组指针.数组的区别与联系! 一:基本定义 1.指针数组 char *arr[4] = {"hello", "world", "shannx ...
- C语言中指针和数组的区别
看<C专家编程>一书,看到数组与指针并不相同一章,遂做了一段测试: 代码: #include <stdio.h> #include <stdlib.h>int ma ...
- C语言中指针与数组的区别,C语言 指针与数组的详解及区别
C语言 指针与数组的详解及对比 通俗理解数组指针和指针数组 数组指针: eg:int( *arr)[10]; 数组指针通俗理解就是这个数组作为指针,指向某一个变量. 指针数组: eg:int*arr[ ...
- 浅谈C中的指针和数组(一)
本文转载地址:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242138.html 在原文的基础上加入自己的想法作为修改. 指针是C/C ...
- 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- 什么是指针?什么是数组?指针和数组的关系?
什么是指针?什么是数组?指针和数组的关系? 形象地讲,我们可以把计算机的内存看作一条长街上的一排房屋,每个房间都可以容纳数据并通过一个房号来表识.而表示每个房间房号的值我们可以称为地址.或许这样的比喻 ...
- 浅谈C/C++中的指针和数组(一)
指针是C/C++的精华,而指针和数组又是一对欢喜冤家,很多时候我们并不能很好的区分指针和数组,对于刚毕业的计算机系的本科生很少有人能够熟练掌握指针以及数组的用法和区别.造成这种原因可能跟现在大学教学以 ...
- 【软件开发底层知识修炼】二十七 C/C++中的指针与数组是不同的
上几篇文章学习了ABI-应用程序二进制接口:[软件开发底层知识修炼]二十六 ABI-应用程序二进制接口 学习总结文章目录 本篇文章就指针与数组的联系与区别来学习学习 文章目录 1 疑问 2 指针与数组 ...
最新文章
- 如何确认oracle客户端中的TNSNAMES中的service_name
- 返回一个整数数组中最大子数组的和
- WinForm -- 为TextBox文本框添加鼠标右键菜单
- Asp.net 中 OnClientClick 与 OnClick 的执行顺序
- 『中级篇』容器网络之host和none(29)
- android全局计时_Android中使用定时器的三种方法
- Spring security3入门(转)
- 【读书笔记《Android游戏编程之从零开始》】1.Android 平台简介与环境搭建
- java程序设计实用教程 实验6答案_java程序设计实用教程习题解答与实验指导.doc...
- 毫米和像素怎么换算_像素换算(像素和毫米换算器)
- BZOJ.3097 Hash Killer 1(卡掉自然溢出法)
- pmv计算c语言软件,晨光暖通计算工具
- MatplotlibDeprecationWarning: Calling gca() with keyword arguments was deprecated in Matplotlib 3.4
- Android系统简介
- CH583/CH579蓝牙智能遥控器方案
- 哈夫曼树及哈夫曼编码(考试常考版)
- java scp 传文件乱码_转-linux 打开移动硬盘中的文本文件显示为乱码
- 慕尼黑工业大学开源含四季的数据集:用于自动驾驶的视觉长期定位
- 物联网安全技术——思维导图
- yjp在jboss上的on-demand attach