栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

char *是字符指针还是字符串指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

char *是字符指针还是字符串指针

char *是字符指针还是字符串指针?
  • 1. 代码案例分析
    • 1.1代码运行结果
  • 2. 案例总结

就关于这个问题的答案,我和我的指导老师发生了一场激烈的辩论,最终也没能让我老师同意我的观点,既然这样就交给广大的网友们吧。我认为:char *是字符指针,老师认为:char *是字符串指针,下面给出我的观点图。

声明:此次代码的运行环境为:Linux 64位系统,g++编译器

1. 代码案例分析
#include 
#include 
#include 

using namespace std;

//------------------------------------------[c语言的指针方式]
void fun1(char *p)
{
    p++;    //p可以进行++操作,地址偏移步长为一个char类型所占字节,说明p不是一个数组地址
    cout <<"fun1: "<< p <
    //(*p)++; 该语句报错,报错原因为不能增加p的值,说明*p相当于引用了main函数中的数组
    cout <<"fun2: " << *p << endl; //输出结果为:hello
    cout << endl;
}

//------------------------------------------[c++的引用方式]
void fun3(char &p) //引用字符
{
    cout << "fun3: " << &p << endl; //输出结果为:hello
    cout << "fun3: " << p << endl;  //输出结果为:h
    cout << endl;
}

void fun4(char (&p)[10])    //引用数组,注意10是不能改变为其他数值的,因为arr有10个成员,为其他值时会报错类型不匹配
{
    //p++; 该语句报错,因为p被视为数组,对数组名进行++是不允许的
    cout <<"fun4: "<< p << endl;	//打印hello
}


int main(void)
{
    char arr[10] = "hello";
    // arr++;此代码是会报错的,因为数组名是指针常量,++操作改变了arr的值,因此报错
    fun1(arr);      //形参为char *p,实参被视为char *类型
    fun1(&arr[0]);  //形参为char *p,实参被视为char *类型

    fun2(&arr);     //形参char (*p)[10],实参被视为char (*)[10]类型

    fun3(*arr);     //形参为char &p,实参被视为char类型
    fun3(arr[0]);   //形参为char &p,实参被视为char类型

    fun4(arr);      //形参为char (&p)[10],实参被视为char ()[10]类型

    return 0;
}
1.1代码运行结果

2. 案例总结
  • 分析完上述代码大家可以看到,主要的核心就是数组的类型应该是char *还是char ()[],我得出的结论是:char ()[]类型。
  • 另外,有一点需要额外注意,当在main函数中调用fun函数并以arr作为实参时,arr既可以被看做char ()[10]类型也能被看做char *类型,为什么会出现这一现象? 我个人的观点是: 其根本原因是c++中引用类型的出现所导致的。在C语言中,arr被看做了字符数组首元素的地址,并且在c++里沿用了c这一特点,除此以外,在涉及到变量引用时,会不可避免地产生一些交集,那么arr到底是什么类型呢,在c++中的答案是不唯一的,arr类型的判别取决于被调用函数fun的相应形参类型了。
  • c语言中依靠向函数传入指针来达到影响main函数中变量值的目的,而c++是依靠变量引用来达到该目的。
  • 因为与引用类型匹配的是变量类型,而与指针类型匹配的是变量地址,但好在我们用c++开发时,不用考虑指针当做函数实参,用引用就完事了。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/979697.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号