char * 的疑问

在使用char* 传递参数的时候,以为char* 传递的是指针;

#include <iostream>
#include<string>
#include <cstring>
#include<vector>

using namespace std;


void printNoref(char * s){
    cout<<"非引用传值函数中s 地址:"<<&s<<endl;
    cout<<"s 指向的地址:"<<(int*)s<<endl;
    s++;
    cout<<"str:"<<s<<endl;
}


void printref(char *& s){
    cout<<"非引用传值函数中s 地址:"<<&s<<endl;
    cout<<"s 指向的地址:"<<(int*)s<<endl;
    (s)++;
    cout<<"ref str:"<<s<<endl;
}



int main() {
    string s ( "123456789");
    char* str = new char[s.size() + 1];
    strcpy(str, s.c_str());
    
    // 真实地址
    cout<<"真实 str 地址:"<<&str<<endl;
    cout<<"str 指向的地址:"<<(int*)str<<endl;  
    
    
    //非引用传值
    printNoref(str);
    cout<<"str 指向的地址:"<<(int*)str<<" 值 str:"<<str<<endl;
    cout<<"================"<<endl;
    
    // 引用传值
    printref(str);
    cout<<"str 指向的地址:"<<(int*)str<<" 值 str:"<<str<<endl;
    


    return 0;
}

结果:

真实 str 地址:0x7ffcf092ee08
str 指向的地址:0x1481c20
非引用传值函数中s 地址:0x7ffcf092ede8
s 指向的地址:0x1481c20
str:23456789
str 指向的地址:0x1481c20 值 str:123456789
================
引用传值函数中s 地址:0x7ffcf092ee08
s 指向的地址:0x1481c20
ref str:23456789
str 指向的地址:0x1481c21 值 str:23456789
  • char * s传递的是s地址中存储的指针地址的复制,
  • char*& s传递的是指向s真实地址的指针;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 8,814评论 3 44
  • 最全的iOS面试题及答案 iOS面试小贴士 ———————————————回答好下面的足够了-----------...
    大罗Rnthking阅读 4,547评论 0 2
  • 1.写一个NSString类的实现 +(id)initWithCString:(c*****t char *)nu...
    韩七夏阅读 9,182评论 2 37
  • 前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解...
    有理想有暴富的小青年阅读 3,652评论 0 4
  • 文/孤鸟差鱼 没记忆力的人 总在串戏 认错自己爱过的人
    孤鸟差鱼阅读 2,206评论 0 2