相同:

都定义一个字符串

不同:

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[ ]相关推荐

  1. char arr[] 和 char *arr区别

    char arr[] = "hello world";//arr为数组的名称,数组中的内容在栈中,离开数组所在的作用域,所占用的空间就被释放. char *arr = " ...

  2. c++ char数组和char*

    如果数组长,有多少复制多少,如果数组短,则数组填满为止 char arr[2] = { 0 }; int i; for (i = 0; i < sizeof(arr); i++) { print ...

  3. char[]数组与char *指针的区别

    char[]数组与char *指针的区别 问题描述 虽然很久之前有看过关于char指针和char数组的区别,但是当时没有系统的整理,到现在频繁遇到,在string,char[], char *中迷失了 ...

  4. char *字符串和char[]的区别

    简介 char *类型的字符串和char []类型的字符数组在 C 语言中经常用到,它们的主要区别在于如何定义和使用.char *类型的字符串是一个指向字符数组的指针,指针的值为第一个字符的地址,字符 ...

  5. 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 ...

  6. char*,const char*,string的相互转换 C++

    转:https://www.cnblogs.com/wxmdevelop/p/4567857.html string转const char* string s ="abc"; co ...

  7. char *p 与char p[N]

    数组不是指针,指针也不是数组,这是两个不同的东西,只是在某些场合下,可以进行相似的操作. char a[10] = "Hello"; char *p = "World&q ...

  8. char str[]与char *str的区别

    一个具体例子: main() {char *p="abc123ABC";//char p[]="abc123ABC"int i=0;while(*(p+i)!= ...

  9. char s []和char * s有什么区别?

    在C语言中,可以在这样的声明中使用字符串文字: char s[] = "hello"; 或像这样: char *s = "hello"; 那么区别是什么呢? 我 ...

最新文章

  1. 如何评估一项技术是否值得长期投入?
  2. SQL必知必会——插入数据(十五)
  3. linux环境安装nagiosgraph将nagios的性能数据绘制成动态图表?
  4. 转: databasemetadata 无法获取数据库表备注的解决方法
  5. python 32bit数据结构_python实现bitmap数据结构详解
  6. modbus协议手册_20种PLC元件编号和Modbus编号地址对应表
  7. 百合数c语言360问答,《百合花》
  8. python hook_五分钟内用Python实现GitHook
  9. 基于IHttpAsyncHandler的TCP收发器
  10. Atitit 快速开发的推荐技术标准化 规范 大原则
  11. mysql提权马免杀_webshell/牛逼免杀提权隐藏大马 (1).asp at master · tennc/webshell · GitHub...
  12. 【AVR单片机】【Microchip Studio】01项目创建
  13. 62页 PPT 解剖《麦肯锡方法》及《麦肯锡工具》
  14. uni-app创建并运行微信小程序项目
  15. 2010-03-24 网络驱动
  16. 电子元器件采购需要掌握哪些基础知识?
  17. 最新AI产品经理求职动态:卡年龄、卡学历,这么卷,怎么办?
  18. 局域网共享磁盘或文件夹访问
  19. efci 计算机网络,数值型关联规则挖掘在网络入侵检测系统中的应用研究
  20. 丰巢快递柜启动超时收费3元封顶;谷歌市值一夜暴涨5000亿;两行代码构成的npm包影响到了数百万项目 | EA周报...

热门文章

  1. SWAT模型建模方法
  2. 小讲堂:Mobox文档管理软件中的文件外链是什么?
  3. React Native - Keyboard API使用详解(监听处理键盘事件)
  4. matlab图像校正工具箱_相机标定简介与MatLab相机标定工具箱的使用(未涉及原理公式推导)...
  5. 《长春教育学院学报​》教育学报征稿
  6. 多颜色显示北京各县区-ArcGis操作
  7. Python进制相互转换(二进制、十进制和十六进制)的代码
  8. VMware或Hyper-V 工具ISO映像文件位置
  9. Oracle R12采购接收流程 PR-PO-RCV-AP-Payment
  10. Go | 一分钟掌握Go | 10 - 反射