Char *p1 = “A String.” 和 char p2[] = “another String.” 写法的不同

p1指向的这个字符串是个常量, 不可改变。 程序在编译期间就为"A String."这个字符串分配了固定的空间, 它被存储在全局静态区中. 编译器只是把指针p1的指向的地址赋为“A String.”的首地址,并没有为指针p1指向的地址分配可供操作的内存(除非使用malloc),如果试图改变p1指向的字符串,则会出错(试图改变不可写内存内容的错误)。

而p2是个变量, 其内容可以被更新和改变, p2可以理解为一个不可改变其指向位置的指针, 即char * const p2, 它所占用的内存在程序运行时被自动分配和释放, 而p1占用的内存要等到整个程序结束时才被释放. 编译器为数组b分配了可供操作的存储空间.

C代码
  1. #include <stdio.h>
  2. void main()
  3. {
  4. void copy_string(char *si, char *di);
  5. char *ss,*dd;
  6. char from[] = "I am a student.";
  7. char to[]   = "You are a teacher.";
  8. ss = "I am a student.";
  9. dd = "You are a teacher.";
  10. printf("a:%s/nb:%s/n",ss,dd);
  11. copy_string(ss,to); //这样写没有问题
  12. //copy_string(ss,dd); //有问题
  13. //copy_string(from,to);//没问题
  14. printf("/n");
  15. printf("a:%s/nb:%s/n",ss,to);
  16. }
  17. void copy_string(char *si, char *di)
  18. {
  19. for(; *si != '/0'; si++,di++)
  20. *di = *si;
  21. *di = '/0';
  22. }
#include <stdio.h>
void main()
{
void copy_string(char *si, char *di);
char *ss,*dd;
char from[] = "I am a student.";
char to[]   = "You are a teacher.";
ss = "I am a student.";
dd = "You are a teacher.";
printf("a:%s/nb:%s/n",ss,dd);
copy_string(ss,to); //这样写没有问题
//copy_string(ss,dd); //有问题
//copy_string(from,to);//没问题
printf("/n");
printf("a:%s/nb:%s/n",ss,to);
}
void copy_string(char *si, char *di)
{
for(; *si != '/0'; si++,di++)
*di = *si;
*di = '/0';
}

字符串表示形式—字符数组和字符指针的区别相关推荐

  1. C语言内存管理-字符数组与字符指针

    堆和栈的区别 一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其 操作方式类似于数据结构中的栈. 2.堆区(h ...

  2. c++ string 拼接_C++日志(二十五)字符数组、字符数组指针和string类

    C++中字符串的表示方式有很多种,根据自己目前掌握的有三种: 字符数组: 字符数组指针: 标准库string类: 上面几种方式各有优点和缺点,按照自己的观点,如果处理的字符串的任务比较简单,则使用前两 ...

  3. 第八篇,字符数组和字符指针详细讲解。

    一.字符数组. 1.什么是字符数组? 在一个数组中,每一个成员都是一个字符 例如: char A[3]   --> 每一个成员都是字符类型的数据,组成一个字符串. 2.字符数组的赋值? char ...

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

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

  5. 神奇的判断数组名和指针的区别

    神奇的判断数组名和指针的区别 代码 代码 傻傻的区分不清楚数组名和指针的区别,下面的代码可以证明指针和数组名其实不是一个东西: // An highlighted block #include< ...

  6. 从编译器角度分析C语言中数组名和指针的区别

    从编译器角度分析C语言中数组名和指针的区别 数组名和指针是两个往往很容易让人们混淆的概念,很多人以为数组名就是一个指针,也有很多人知道数组名不同于指针但是仅知道数组名的值不能像指针一样改变. 例如你可 ...

  7. c 将数字数组转成字符串_C+|用指针指向字符串字面量、字符数组及字符指针数组...

    指针可以指向一个字符串字面量,可以指向一个字符数组,可以指向一块动态分配的内存单元: char *s1, *s2, *s3 = "abcde"; char ch[] = " ...

  8. 《C语言杂记》C语言字符数组与字符指针(指向字符串的指针)详解

    C语言中没有特定的字符串类型,我们通常是将字符串放在一个字符数组中,字符数组用法很简单我们还是来你看个例子吧. #include <stdio.h> #include <string ...

  9. 字符串输入的一些注意事项(字符数组,字符指针,以及scanf_s超出大小限制会发生什么)

    如果你想要在程序中输入字符串,必须要先预留足够的空间 一定不要这样做(指针形式): char* p; scanf("%s", p);//危险 scanf将输入的字符串放在p指定的地 ...

  10. c语言字符数组给字符指针,C语言常见有关问题之字符串数组和字符指针数组有关问题...

    C语言常见问题之字符串数组和字符指针数组问题 通过如下的实例来讲解这个问题: #include int main(void) { char a[3][4] = {"123", &q ...

最新文章

  1. 【更新】比较智能的爬取姓名
  2. 马库斯再批深度学习:20年毫无进展,无法处理语言复杂性
  3. 问题-[Delphi]MainFrame.pas(4340): E2036 Variable required
  4. memcached企业面试题
  5. 用java写游戏_用java写的扫雷游戏
  6. python numpy数组转换成列表方法 object.tolist()函数
  7. 查看linux内存存储空间不足,Linux 下判断Server 内存是否不足
  8. jquery跳出当前的each循环的方式
  9. Android视图组成View
  10. 怎么成为开源贡献者_成为开源领导者意味着什么
  11. python 堆栈溢出_IAR堆栈溢出的问题
  12. c语言数字分解一个数,关于一道分解整数为N个连数整数的编程题
  13. 7-19 求链式线性表的倒数第K项
  14. Atitit.html css  浏览器原理理论概论导论attilax总结
  15. 电机转速模糊pid控制
  16. php中wamp具体指的是,phpwamp和wampserver有什么关系,为什么名字都带wamp这几个字母,两者有区别吗?我应该用哪个?...
  17. 基于JavaWEB+MySQL的房屋租赁网站管理系统
  18. SAP PI PO XSLT Mapping of Adapter-Specific Message Attributes
  19. 红米2 手机root
  20. Android最完整的仿QQ表情聊天图文展示代码示例

热门文章

  1. Centos7下Confluence5.6.6安装
  2. 网络规划设计师考试总结
  3. 软考信息安全工程师备考笔记5:第五章应用系统安全基础备考要点
  4. Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)!
  5. QT动态库和静态库使用
  6. python3-开发进阶补充Django中的文件的上传
  7. JavaScript四大家族之client家族
  8. 第十节(this关键字 static关键字)
  9. [程序猿感悟] [悟] 两篇不错的文章 (转载自 stay4it )
  10. 如何卸载自己手机上的APK文件程序