char *arr与char a[ ]
相同:
都定义一个字符串
不同:
1,含义上的区别:数组对应着一块内存区域,而指针是指向一块内存区域。其地址和容量在生命期里不会改变,只有数组的内容可以改变;而指针却不同,它指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容是不可以被修改的,否则在运行时会报错。
看一个例子:
int main()
{
char*arr1="xiao";
char*arr2="liu";
strcpy(arr1,arr2);
printf("%s %s\n",arr1,arr2);
return0;
}
在编译时不会报错,但是在运行时会报错,原因在于企图改变s1的内容,由于s1,s2指向的是常量字符串,其内容是不可修改的,因此在运行时不会通过。
而下面这个程序是可以运行通过的,原因在于数组的内容是可以被修改的:
int main()
{
char arr1[100]="xiao";
char arr2[ ]="liu";
strcpy(arr1,arr2);
printf("%s %s\n",arr1,arr2);
return0;
}
2,计算内存的区别: 用sizeof可以计算出数组的字节数,而用sizeof却无法计算指针所指内存的容量,用sizeof(arr)得到的结果永远是4或者2。在进行参数传递时,数组会自动退化为同类型的指针。
eg: char *str8 = "abcdef\n\0";//7,4
char *str6 = "abcdef\0xyz";//6,4
printf("%d,%d\n",strlen(str8),sizeof(str8));
printf("%d,%d\n",strlen(str6),sizeof(str6));
注:1,char *arr={'l','i','u'}; 会报错!!!!!!!!!!!!!!!
2, "liu"会自动加\0,{'l','i','u'}不会自动加\0
char *arr2="liu"; //4
char arr3[]="liu";//==char arr[]={"liu"}; //4
char arr4[]={'l','i','u'}; //3
char arr5[]={'l','i','u','\0'}; //4
printf("%d\n",sizeof(arr2));
printf("%d\n",sizeof(arr3));
printf("%d\n",sizeof(arr4));
printf("%d\n",sizeof(arr5));
char *arr与char a[ ]相关推荐
- char arr[] 和 char *arr区别
char arr[] = "hello world";//arr为数组的名称,数组中的内容在栈中,离开数组所在的作用域,所占用的空间就被释放. char *arr = " ...
- c++ char数组和char*
如果数组长,有多少复制多少,如果数组短,则数组填满为止 char arr[2] = { 0 }; int i; for (i = 0; i < sizeof(arr); i++) { print ...
- char[]数组与char *指针的区别
char[]数组与char *指针的区别 问题描述 虽然很久之前有看过关于char指针和char数组的区别,但是当时没有系统的整理,到现在频繁遇到,在string,char[], char *中迷失了 ...
- char *字符串和char[]的区别
简介 char *类型的字符串和char []类型的字符数组在 C 语言中经常用到,它们的主要区别在于如何定义和使用.char *类型的字符串是一个指向字符数组的指针,指针的值为第一个字符的地址,字符 ...
- const char *str,char const *str,char *const str的区别,及const详解
c和c++中有三种定义: 1.const char *str, 2.char *const str, 3.char const *str. 现总结三者之间的区别: 一 char *const str ...
- char*,const char*,string的相互转换 C++
转:https://www.cnblogs.com/wxmdevelop/p/4567857.html string转const char* string s ="abc"; co ...
- char *p 与char p[N]
数组不是指针,指针也不是数组,这是两个不同的东西,只是在某些场合下,可以进行相似的操作. char a[10] = "Hello"; char *p = "World&q ...
- char str[]与char *str的区别
一个具体例子: main() {char *p="abc123ABC";//char p[]="abc123ABC"int i=0;while(*(p+i)!= ...
- char s []和char * s有什么区别?
在C语言中,可以在这样的声明中使用字符串文字: char s[] = "hello"; 或像这样: char *s = "hello"; 那么区别是什么呢? 我 ...
最新文章
- 如何评估一项技术是否值得长期投入?
- SQL必知必会——插入数据(十五)
- linux环境安装nagiosgraph将nagios的性能数据绘制成动态图表?
- 转: databasemetadata 无法获取数据库表备注的解决方法
- python 32bit数据结构_python实现bitmap数据结构详解
- modbus协议手册_20种PLC元件编号和Modbus编号地址对应表
- 百合数c语言360问答,《百合花》
- python hook_五分钟内用Python实现GitHook
- 基于IHttpAsyncHandler的TCP收发器
- Atitit 快速开发的推荐技术标准化 规范 大原则
- mysql提权马免杀_webshell/牛逼免杀提权隐藏大马 (1).asp at master · tennc/webshell · GitHub...
- 【AVR单片机】【Microchip Studio】01项目创建
- 62页 PPT 解剖《麦肯锡方法》及《麦肯锡工具》
- uni-app创建并运行微信小程序项目
- 2010-03-24 网络驱动
- 电子元器件采购需要掌握哪些基础知识?
- 最新AI产品经理求职动态:卡年龄、卡学历,这么卷,怎么办?
- 局域网共享磁盘或文件夹访问
- efci 计算机网络,数值型关联规则挖掘在网络入侵检测系统中的应用研究
- 丰巢快递柜启动超时收费3元封顶;谷歌市值一夜暴涨5000亿;两行代码构成的npm包影响到了数百万项目 | EA周报...
热门文章
- SWAT模型建模方法
- 小讲堂:Mobox文档管理软件中的文件外链是什么?
- React Native - Keyboard API使用详解(监听处理键盘事件)
- matlab图像校正工具箱_相机标定简介与MatLab相机标定工具箱的使用(未涉及原理公式推导)...
- 《长春教育学院学报​》教育学报征稿
- 多颜色显示北京各县区-ArcGis操作
- Python进制相互转换(二进制、十进制和十六进制)的代码
- VMware或Hyper-V 工具ISO映像文件位置
- Oracle R12采购接收流程 PR-PO-RCV-AP-Payment
- Go | 一分钟掌握Go | 10 - 反射