IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ while(*s1++ = *s2++) 与 while(*s1++ == *s2++) -> 正文阅读

[C++知识库]C++ while(*s1++ = *s2++) 与 while(*s1++ == *s2++)

while(*s1++ = *s2++)

一道C++题目:

请选择以下程序的运行结果 ( )

#include<stdio.h>
int main()
{
  char  str1[] =  "India";
  char  str2[] =  "BIX";
  char *s1 =  str1, *s2=str2;
  while(*s1++ = *s2++)
    printf("%s",  str1);

  printf("\n");
  return 0;
}

A.IndiaBIX
B.BndiaBIdiaBIXia
C.India
D.(null)

这里考察的是C++的指针,程序中一共有两个指针:*s1 以及 *s2

首先,这两个指针初始状态下分别指向两个字符串str1以及str2。但是在执行:

while(*s1++ = *s2++)

的时候指针指向的位置发生了变化。赋值表达式的值等于被赋给s1的那个字符的ASCII码值,这一点很重要。虽然++的优先级高于*,但由于++放在指针变量的后面,所以先执行赋值表达式,然后指针变量自增。

所以当程序第一次进入while循环时,算法首先执行的是将指针s1指向s2的开头。所以此时指针*s1开头第一个字符不再是str1中的首字母I而是str2中的B,因此打印函数

printf("%s",  str1);

得到的结果为:

Bndia

同时,当s2指向的空间有字符时,将其传递给当前s1指向的空间,赋值表达式的值不为0(非零即真),while循环不停止,当s2指向字符串结束符‘\0’并赋给时s1所指空间时,赋值表达式的值为0,while循环停止,字符串完成了复制。

所以执行第二次循环,根据s1++以及s2++将指针s1中的第二项指向s2的第二项,得到:

BIdia

以及第三次循环:

BIXia

所以最后打印结果为:

BndiaBIdiaBIXia

while(*s1++ == *s2++)

while(*s1++ = *s2++) 与 while(*s1++ == *s2++)虽然只相差了一个“=”,但是差别还是比较大的。

对于上面这个程序将“=”修改为“==”后再次运行:

#include<stdio.h>

int main()
{
  char  str1[] =  "India";
  char  str2[] =  "BIX";
  char *s1 =  str1, *s2=str2;
  while(*s1++ == *s2++)
    printf("%s",  str1);

  printf("\n");
  return 0;
}

程序输出为:

(null)

这里是由于“==”为比较运算符,程序执行时比较每一个字符串之间是否相等,这里while循环第一次比较的是两个字符串首字母是否相同,也就是"India"与"BIX"。显然它们是不同的,所以while循环的值为0。跳出循环。

若修改两个字符串为:“abIndia"与"abBIX”,重新运行上述程序:

#include<stdio.h>

int main()
{
  char  str1[] =  "abIndia";
  char  str2[] =  "abBIX";
  char *s1 =  str1, *s2=str2;
  while(*s1++ == *s2++)
    printf("%s",  str1);

  printf("\n");
  return 0;
}

此时由于字符串前两个字符相同,while循环执行两次,第三次跳出循环。所以最后的输出为:

abIndiaabIndia

即重复打印两次字符串 “abIndia”

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-11 12:32:24  更:2021-11-11 12:33:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:05:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码