分享

计算机编程C语言指针答疑:字符串指针和字符数组

 山峰云绕 2019-07-21

一、计算机编程C语言答疑合集

https://www.toutiao.com/a6715637348882711053/

更多C语言答疑文章,请参阅:计算机编程C语言答疑文章合集

或者点击下方,加入我的“C语言答疑课堂”圈子吧,第一时间看到我给大家带来的C语言试题分析!

二、【计算机编程】【C语言指针试题】

有下面四个C程序代码语句:

  1. char array1[] = "I love C";
  2. char array2[] = "I love C";
  3. char *pChar1 = "I love C";
  4. char *pChar2 = "I love C";

printf("array1 == array2吗? %d\n", array1 == array2);

printf("pChar1 == pChar2吗? %d\n", pChar1 == pChar2);

请问两条C程序printf语句会输出什么?

三、【计算机编程】【C语言指针答疑】

1、“己他”概念来解题

这道C语言指针题考察了字符数组、常量字符串、指向字符的指针等知识点,看上去让人“眼花缭乱”。使用我提出的C语言指针“己他”中的“己值”、“他址”概念以及“指针运算”来解这道题是很简单的,这些概念在我的专栏:

的第九章、第十章、第十三章有详细的阐述,如下:

第九章:章节九、指针“己X”概念,从这里开始!(基本数据类型篇)

第十章:章节十、指针“他X”概念,精彩来了!(基本数据类型篇)

第十三章:章节十三、指针做运算,你以为很难吗?(应用于数组)

2、C程序代码

我来把这道C语言指针题扩展成一段C程序代码,如下:

计算机编程C语言指针答疑:字符串指针和字符数组

C程序代码

这段C程序代码我定义了两个字符数组array1和array2,各自保存了一个字符串"I love C",紧接着又定义了两个指针变量pChar1、pChar2,指向两个字符串"I love C"。运行结果如下:

计算机编程C语言指针答疑:字符串指针和字符数组

C程序运行结果

这个结果就是上述C程序试题答案。

3、C程序代码分析

3.1 分析1

在C程序代码的第5行和第6行有如下语句:

char array1[] = "I love C";
char array2[] = "I love C";

两个字符数组虽然保存的字符串看上去是一样的,都是"I love C",其实这两个字符串在内存中位于不同的位置。

从运行来看,字符数组array1的第一个元素地址是22feaf,而数组名array1的己值也是22feaf。我在专栏中提到过,数组名array1这种C代码写法就是第一个元素的地址,也就是说array1的己值22feaf这个数字的含义就是“他址”,他人(array1[0])的地址。

从运行来看,字符数组array2的第一个元素地址是22fea6,而数组名array2的己值也是22fea6,也就是说array2的己值22fea6这个数字的含义就是“他址”,他人(array2[0])的地址。

C程序代码第17行如下语句:

printf("array1 == array2吗? %d\n", array1 == array2);

这种C程序代码写法就是用指针变量的己值做比较运算。array1的己值是22feaf,array2的己值是22fea6,它们相等吗?当然不相等,所以输出:0!

3.2 分析

在C程序代码的第7行和第8行有如下语句:

char *pChar1 = "I love C";
char *pChar2 = "I love C";

两个指针变量指向的字符串看上去是一样的,都是"I love C",而且这两个字符串就是同一个,也就是说在内存中位于一个位置,这就是常量字符串!

从运行来看,指针变量pChar1的己值是404000。我在专栏中提到过,指针变量pChar1的己值就是常量字符串"I love C"的第一个字符的地址,也就是字符‘I'的地址。

从运行来看,指针变量pChar2的己值也是404000,与指针变量pChar1的己值相等,这再次说明指针变量pChar1和pChar2指向的是同一个字符串。

C程序代码第18行如下语句:

printf("pChar1 == pChar2吗? %d\n", pChar1 == pChar2);

这种C程序代码写法就是用指针变量的己值做比较运算。既然两个指针变量的己值相等,所以输出:1!

四、C语言指针试题总结

这道C语言指针试题看上去难吗?还是在我提出的“己他”概念范围内,所以我一直跟同学们说“C语言指针就是个纸老虎”!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多