1) 字符串指针变量是个变量,指向字符串的首地址;而字符串数组名是个常量,为字符串数组第一个元素的地址;

2)字符串指针变量可以赋值,而字符串数组名不能赋值;
对于字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值: char str[14]; str = "I love you!"; 而对于字符指针变量,可采用如下赋值: char *a; a = "I love you!"; 赋值给a的是字符串第一个元素的地址

3)定义一个字符串指针变量时,只给指针变量分配了空间,但指针变量存放的地址并没有分配,即不知道该指针到底指向哪个字符串(当然这种做法是危险的);而定义一个字符串数组,在编译时会占用实际的空间,比如int a[100]则会占用400个字节的空间;

4)对于二维数组与指针数组的区别:指针数组的每一行长度可以不同,而二维数组的每行的长度是相同的。

网上找到一篇写的比较详细的:

(1)分配内存
  设有定义字符型指针变量与字符数组的语句如下:
  char *pc ,str[100];
  则系统将为字符数组str分配100个字节的内存单元,用于存放100个字符。而系统只为指针变量pc分配4个存储单元,用于存放一个内存单元的地址。
  (2)初始化赋值含义
  字符数组与字符指针变量的初始化赋值形式相同,但其含义不同。例如:
  char str[ ] ="I am a student ! " ,s[200];
  char *pc="You are a student ! " ;
  对于字符数组,是将字符串放到为数组分配的存储空间去,而对于字符型指针变量,是先将字符串存放到内存,然后将存放字符串的内存起始地址送到指针变量pc中。
  (3)赋值方式
  字符数组只能对其元素逐个赋值,而不能将字符串赋给字符数组名。对于字符指针变量,字符串地址可直接赋给字符指针变量。例如:
  str="I love China! "; //字符数组名str不能直接赋值,该语句是错误的。
  pc="I love China! "; //指针变量pc可以直接赋字符串地址,语句正确 
  (4)输入方式
  可以将字符串直接输入字符数组,而不能将字符串直接输入指针变量。但可将指针变量所指字符串直接输出。
  例如: cin >> str //正确
  cin >> pc //错误
  cout<<pc //正确
  (5)值的改变
  在程序执行期间,字符数组名表示的起始地址是不能改变的,而指针变量的值是可以改变的。例如:str=str+5; //错误
  pc=str+5; //正确
  小结 字符数组s[100] 指针变量pc
  (1)分配内存 分配100个单元 分配4个单元。
  (2)赋值含义 字符串放到数组存储空间 先将字符串存放到内存
  将存放串的首地址送到pc中。
  (3)赋值方式 只能逐个元素赋值 串地址可赋给pc
  (4)输入方式: 串直接输入字符数组 不能将字符串直接输入指针变量
  (5)值的改变: 字符数组首地址不能改变 指针变量的值可以改变
由以上区别可以看出,在某些情况下,用指针变量处理字符串,要比用数组处理字符串方便。

yathing分析这个问题:
一个是变量、一个是数组,其实也是一个变量符号(这个str本身不能改变而已),从这个共同点出发考虑问题,变量的事情,无非就是“存储”、“操作(operate)”两个方面,下面的任务就是详细地思考了:
1,空间上的差异:两种类型是如何存储的。
2,操作上的差异:如何取用(输入输出,赋给别的元素)、如何对赋值、如何改变它们
尽可能地详尽上面两方面的内容,回忆平时编程的例子,最后就能写出答案。

(转载)C语言 数组与指针的区别的更多相关文章

  1. (C语言)数组与指针的区别

    以前常常听过这种说法,说数组和指针这两者比较像,但是不能混淆,可是一直没能理解.刚刚在李云的<专业嵌入式软件开发>中,看了讲述数组与指针区别的一章,似乎有所领悟.本着知乎上看到的这张图,我 ...

  2. 数组与指针的区别,以及在STL中传递数组/指针

    数组和指针在作为实参传入T[] 或T*的形参时没有区别 void f(int pi[]) { cout << sizeof(pi) << endl; } int a[5] = ...

  3. C语言 > 数组和指针

    C语言 数组和指针 const: 关于指针和const需要注意一些规则.首先,把const数据或非const数据的地址初始化为指向const的指针或为其赋值是合法的. 然而,只能把非const数据的地 ...

  4. C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别

    1.一个实例+理论分析 在了解数组和指针的访问方式前提下,下面再看这个例子: main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); pr ...

  5. 深入解析C语言数组和指针

    概述 指针是C语言的重点,同时也是让初学者认为最难理解的部分.有人说它是C语言的灵魂,只有深入理解指针才能说理解了C语言.暂且撇开这些观点不谈.这章是我在阅读<C和指针>这本书的读书笔记. ...

  6. C语言数组与指针总结

    寒假要开始猛刷<剑指offer>,先回顾一下C语言基础做个热身. 指针 相信大家对下面的代码不陌生: ; int *p; p=&i; 这是最简单的指针应用,也是最基本的用法.再来熟 ...

  7. C语言数组和指针是不同的

    有一个这样的错误: 在一个文件中定义:int mango[100];  在另一个文件中声明:extern int *mango;  将会产生错误 定义和声明的区别: 在C中,任何对象都有且只有一个定义 ...

  8. C语言-数组与指针 字符与字符串

    1 字符与字符串:char c='a'而不能写出char c="a" //字符变量用单引号'',而字符串用双引号. 2 字符数组与字符指针的初始化: char s[10]={0}, ...

  9. c语言-数组、指针面试题

    转载 说明:所有题目均摘录于网络以及我所见过的面试题目,欢迎补充! 无特殊说明情况下,下面所有题s目都是linux下的32位C程序. 先来几个简单的热热身. 1.计算以下sizeof的值. char ...

随机推荐

  1. Guava官方文档-RateLimiter类

    转载自并发编程网 – ifeve.com RateLimiter 从概念上来讲,速率限制器会在可配置的速率下分配许可证.如果必要的话,每个acquire() 会阻塞当前线程直到许可证可用后获取该许可证 ...

  2. hdu 2094 产生冠军(STL,set)

    题目 //把所有的出现的名字开始默认都为冠军(1),然后输了的置为0,表示不为冠军,最后统计不为0的, //当有且只有一个不为0的,这个就为冠军,否则,不能产生冠军. //以上思路来自别人的博客.. ...

  3. SVN用法(merge,branch,switch)

    SVN merge命令用法 使用svn的merge命令,把一个版本的变化合并到另一个版本.我使用的tortoise,在当前的工作目录点击右键,选择merge,在from框输入源url,在revisio ...

  4. MongoDB的安装,配置与开机自启动

    关于简介不多说百度去吧少年.. MongoDB详细安装: 1.进入官网,点击DOWNLOAD MONGODB,下载所需要的版本.. 我这里把下载的文件放在d\MongoDB文件夹下,点击下载的官方镜像 ...

  5. Java:Comparator接口

    public interface Comparator<T> 接口里面的方法 int compare(T o1, T o2) o1 > o2 返回 1 o1 = o2 返回 0 o1 ...

  6. lintcode:Wiggle Sort II

    Wiggle Sort II Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] ...

  7. linux下tomcat下部署项目如何打包压缩备份

    范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩![root ...

  8. Linux进程间通信(IPC)

    序言 linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的. 而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心) ...

  9. Java-马士兵设计模式学习笔记-代理模式-动态代理 修改成可以任意修改代理逻辑

    一.概述 1.目标:动态代理的代理逻辑可以任意修改 2.思路: (1)要把代理逻辑抽离,站在jvm的角度思考,应独立出InvocationHandler接口,并接收被代理的对象及方法作为参数invok ...

  10. Linux内核通杀提权漏洞CVE-2016-5195 - 内核升级方法

    如题,对于脏牛(Dirty COW)漏洞的修复方式已经在上篇文章中有介绍过如何验证,这里对如何升级内核给出修复建议. (注意:为避免不必要的生产风险的发生,请审核自己的实际环境而决定采用什么方法进行升 ...