为什么打印字符指针输出是字符串

//============ 打印 strp ==========
#include <iostream>
#include "stdlib.h"
using namespace std;

int main()
{
    // 这里初始化一个字符数组并赋字符串 "hello" 
    // 的地址
    char *strp = "hello";
    // 打印 strp 的值 
    cout << strp << endl;
    system("pause");
    return 0;
}
/*
输出结果:hello
*/
//============ 打印 *strp ==========
#include <iostream>
#include "stdlib.h"
using namespace std;

int main()
{
    // 这里初始化一个字符数组并赋字符串 "hello" 
    // 的地址
    char *strp = "hello";
    // 打印 strp 的值 
    cout << *strp << endl;
    system("pause");
    return 0;
}

为什么不是打印首地址呢?

 我们知道char *strp = "hello";语句中strp保存的是字符串hello在内存中的首地址,也就是字符h在内存中的地址,但是为什么我们在打印的时候却是打印hello呢?

原因分析

 因为系统输出时,先输出strp所指向的第一个字符数据,然后使strp自动加1,使之指向下一个字符,然后再输出一个字符。直到遇到字符串结尾标志‘\0’为止。注意,在内存中,字符串的最后被自动加了一个‘\0’,因此在输出时能确定字符串的终止位置。

打印*strp是什么结果呢?

#include <iostream>
#include "stdlib.h"
using namespace std;

int main()
{
    // 这里初始化一个字符数组并赋字符串 "hello" 
    // 的地址
    char *strp = "hello";
    // 打印 strp 的值 
    cout << *strp << endl;
    system("pause");
    return 0;
}
/*
输出结果:h
*/

 我们知道,*strp是取该内存地址上的值,那么strp存的正是hello字符串的首地址,也就是h的地址,所以这里打印为h并没有疑问!

最后修改:2019 年 04 月 14 日 02 : 43 AM

发表评论