虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈……

主要概括起来有以下几点:

1. 字符数组由若干个元素组成,每个元素中  放一个字符,而字符指针变量中存放的是地址(字符串第1个字符的地址),决不是将字符串放到字符指针变量中。

2. 赋值方式。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。
     char  str[20];
     str=″I love Fishc.com!″;
 
  而对字符指针变量,可以采用下面方法赋值:
     char *a;
     a=″I love Fishc.com!″;
  但注意赋给a的不是字符,而是字符串第一个 元素的地址。

3. 对字符指针变量赋初值:
    char *a=″I love Fishc.com!″;
       等价于
      char *a;
    a=″I love Fishc.com!″;

而对数组的初始化:
    char str[20]={″I love Fishc.com!″};
    不能等价于
    char str[20];
    str[ ]=″I love Fishc.com!″;

4. 如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个字符变量的地址也就是说,该指针变量可以指向一个字符型数据,但如果未对它赋予一个地址值,则它并未具体指向一个确定的字符数据。

我们举个例子来说明,如:
  char str[10];
  scanf(″%s″,str);
     以上是完全可以的!

而常有人用下面的方法,目的是想输入一个字符串,虽然一般也能运行,但这种方法是危险的 :
             char *a;
      scanf(″%s″,a);

5. 指针变量的值是可以改变的,如:改变指针变量的值

#include <stdio.h>void main()
{char *a = "I love Fishc.com!";printf("%s\n", a);//I love Fishc.com!
a += 7;printf("%s\n", a);//Fishc.com!
}

View Code

 另外需要说明的是,若定义了一个指针变量,并使它指向一个字符串,就可以用下标形式引用指针变量所指的字符串中的字符。
    下标形式引用指针变量如下:

#include <stdio.h>
void main()
{char *a = "I love Fishc.com!";int i;printf("The sixth character is %c\n\n", a[5]);//The sixth character is efor( i=0; a[i] != '\0'; i++ ){printf("%c", a[i]);}//I love Fishc.com!printf("\n");
}

View Code

转载于:https://www.cnblogs.com/tianqizhi/p/10046708.html

指针系统学习5-对使用字符指针变量和字符数组的讨论相关推荐

  1. 指针系统学习7-返回指针值的函数

    1.返回指针值的函数 一个函数可以带回一个整型值.字符值.实型值等,也可以带回指针型的数据,即地址.其概念与以前类似,只是带回的值的类型是指针类型而已. 这种带回指针值的函数,一般定义形式为      ...

  2. 系统学习JAVA第十七天(字节流、字符流、缓冲的字节流、缓冲的字符流、将字节流转换为缓冲的字符流、面向对象——>字节流转成对象)

    系统学习JAVA第十七天 第一阶段在2021.2.1结束了! 一.数据传输 IO输入和输出,硬盘之间的数据交换 1.文件读写流程 ①创建文件的容器 ②判断方向 合适的类 创建和文件之间的通道 ③ 调用 ...

  3. python系统学习日记 L13 参数, 解包, 变量

    书中代码: from sys import argvscript, first, second, third = argvprint "The script is called:" ...

  4. linux进程的环境变量,LINUX系统学习一(进程、MMU,环境变量、getenv、fork、getpid/ge...

    LINUX系统学习一(进程.MMU,环境变量.getenv.fork.getpid/ge LINUX系统学习一(进程.MMU,环境变量.getenv.fork.getpid/getppid.ps.ki ...

  5. 系统学习——JavaScript

    系统学习目录 第一篇--HTML/HTML5 第二篇--CSS/CSS3 第三篇--JavaScript 第四篇--jQuery 第五篇--Ajax & JSON 第六篇--Bootstrap ...

  6. C++学习笔记(二)字符型变量、ASCII、转义字符、字符串型、布尔类型、数据输入、算术运算符、前后置递增减、赋值运算符、比较运算符、逻辑运算符

    1.字符型变量 char 字符型变量名 = '单个字符'; char ch = 'a'; 只能使用单引号!!!双引号会认为是字符串变量! 单引号内只能是一个字符,该字符对应ASCII码值. char ...

  7. JAVA的知识点4——字符型变量/常量 boolean类型变量/常量

    字符型变量/常量 字符型在内存中占2个字节,在Java中使用单引号来表示字符常量.例如'A'是一个字符,它与"A"是不同的,"A"表示含有一个字符的字符串. 例 ...

  8. C语言学习笔记---结构体中的字符数组和字符指针

      在结构体中可以使用字符数组来存储字符串,也可以使用字符指针来存储字符串.比如: struct str{char s1[5];char s2[5];};struct str str1= {" ...

  9. C语言指针学习(6)指针数组-字符指针数组

    ** 一.指针数组(比较常见) ** 2.指针数组定义:数组中每个元素都是一个指针(地址) 每个元素只能是地址,不能是普通数据 3.定义指针数组的语法: 数据类型 *数组名[数组长度/元素个数]={地 ...

最新文章

  1. 互联网周刊2021云办公平台TOP50,leangoo领歌敏捷研发协作入选
  2. Flutter实战(一)写一个天气查询的APP
  3. OCM备考 三. Managing Database Availability 之recovery catalog
  4. Codeforces Round #446 (Div. 1) B. Gluttony 构造 + 补集思想
  5. verilator编译 更新文件的规则
  6. php铺满,重复铺满水印 - Jun. - OSCHINA - 中文开源技术交流社区
  7. javascript加载优化
  8. Python——字典生成式
  9. AI电子宠物Vector,会跑会动会聊天,一天内火遍美国科技圈
  10. linux安装oracle11g视频,Linux安装oracle11g详细步骤及问题汇总
  11. VS2015产品激活密钥
  12. 管理员后台爆破扫描器-WebCrack
  13. java的regex_Java的Regex --正则表达式
  14. input-group两侧添加额外元素
  15. 如何沿法线方向挤出面
  16. centos7是linux内核,在CentOS 7上用源代码编译最新的Linux内核
  17. 小学生python游戏编程2----飞机大战1
  18. Android 调用so库全过程
  19. 离校毕业生刚去新的陌生城市,需要提高警惕的几点
  20. signature=cb30417dfa65eef445418827e0f0e0e6,以太坊P2P网络节点初始化

热门文章

  1. 怎么打开jsp文件目录_ppt转换成pdf怎么转?我选择这个办法
  2. 确认和回调_右侧突破但是不能追买,等待回调确认,圣诞节附近接回,波段反弹到大寒附近将是一波好收成,但是大寒又是顶部区域需要高抛。...
  3. 蓝芯保护卡_有个网友问偶蓝芯卡是目前最好的还原卡?它与传统还原卡的区别在哪里?...
  4. python创建链表实例_python数据结构链表之单向链表(实例讲解)
  5. Upload LABS Pass-11
  6. 什么是MongoDB
  7. druid 数据库连接池,简单配置
  8. JDK/Java SE官方文档汇总
  9. HNUSTOJ-1675 Morse Code(DFS+字典序搜索)
  10. STL 源代码剖析 算法 stl_algo.h -- search