注册 登录
编程论坛 C++教室

请看代码,问题也在代码中

wengbin 发布于 2015-11-30 17:43, 1058 次点击
程序代码:
#include<iostream>
using namespace std;
char* getStr1();
char* getStr2();
char* getStr1()
{
    char* p1;
    p1="asdbsd";
    return p1;
}
char* getStr2()
{
    char* p2;
    p2="asdbsd";
    return p2;
}
int main()
{
    char *p1=getStr1();
    char *p2=getStr2();
    cout<<"p1:"<<p1<<" p2:"<<p2<<endl;//p1、p2存的是地址,所以猜想应该输出的是地址(且应该地址相同),结果输出了预设定的字符串asdbsd
    cout<<"*p1:"<<*p1<<" *p2:"<<*p2<<endl;//愿意是用*操作p1、p2指向的内存块,猜想应该都输出asdbsd,结果都输出了a;
    cout<<"&*p1:"<<&*p1<<" &*p2:"<<&*p2<<endl;//由上一行,如果*p1和*p2找到的是a,那再在前面加&取到的应该是全局区中asdbsd的地址了吧(或者说应该是a的地址),结果输出是asdbsd。
   
//今天学内存四区的划分和指针的东西遇到一点不懂的,就自己试了试,结果,我已经完全晕了,请知道的人帮我解释解释
    return 0;
}


[此贴子已经被作者于2015-11-30 17:47编辑过]

12 回复
#2
TonyDeng2015-11-30 18:59
你C学的太好了
#3
rolimi2015-11-30 19:14
cout遇到char*时会默认把它当成C字符串,输出直到遇到\0为止。想输出地址可以强制把char*转成void*
#4
wengbin2015-11-30 19:52
回复 2楼 TonyDeng
版主大人,比嘲笑更好的是教导
#5
wengbin2015-11-30 19:58
回复 3楼 rolimi
谢谢
#6
TonyDeng2015-11-30 20:07
以下是引用wengbin在2015-11-30 19:52:00的发言:

版主大人,比嘲笑更好的是教导

你照这条路走下去,教你就是害你。
#7
wengbin2015-11-30 20:24
回复 6楼 TonyDeng
你好,我是直接学的C++,一直是自学的,这两正好在学网上下载的一套C语言学习视频,听您这么说,我很不解,还请您告诉我一下我应该怎么学,谢谢
#8
孤狼1232015-11-30 21:47
同时天涯沦落人啊,我也在自学c++,可感觉有一点难,可否留下联系方式平时一起交流交流心得?
#9
TonyDeng2015-11-30 21:59
以下是引用wengbin在2015-11-30 20:24:10的发言:

你好,我是直接学的C++,一直是自学的,这两正好在学网上下载的一套C语言学习视频,听您这么说,我很不解,还请您告诉我一下我应该怎么学,谢谢


你先参考一下这个链接:https://bbs.bccn.net/thread-459714-1-1.html
在C++的思想中,是不鼓励再使用诸如cz字符串、数组、地址那样的东西的,而你现在却在钻研这些。
#10
农民工2015-12-01 14:53
    cout<<"p1:"<<p1<<" p2:"<<p2<<endl;//p1、p2存的是地址,所以猜想应该输出的是地址(且应该地址相同),结果输出了预设定的字符串asdbsd
-->其他都对,就是括号里的是错误的(程序编译后 p1="asdbsd";这个asdbsd 占用一段存储区,p1就是指向这段内存,同理 p2="asdbsd";这个asdbsd 也占用一段存储区,只是碰巧这2段内容一样罢了,但占据的地址确实是2个地址段(严格说 ,我的解释还是有问题,但你现阶段不用理会其中的毛病))

    cout<<"*p1:"<<*p1<<" *p2:"<<*p2<<endl;//愿意是用*操作p1、p2指向的内存块,猜想应该都输出asdbsd,结果都输出了a;
-->*p1 只取出一个char类型 ;*p2 只取出一个char类型,即这段内存的第一个char数据

    cout<<"&*p1:"<<&*p1<<" &*p2:"<<&*p2<<endl;//由上一行,如果*p1和*p2找到的是a,那再在前面加&取到的应该是全局区中asdbsd的地址了吧(或者说应该是a的地址),结果输出是asdbsd。
-->*p1 是取p1指向内存区的第一个字符(a),&*p1,就是第一个字符所在的地址,还是“asdbsd”首地址,于是cout作为字符串处理(显示整段字符串内容)
#11
wengbin2015-12-02 09:35
回复 10楼 农民工
谢谢您的详细解说,还想请教您一下,我明年就要毕业了,我学的并不是计算机专业,C++一直是自学,到现在想深入学习,还想学着做做项目,可一直不得其门而入,做项目更是没有机会,我想请教您的是,我C++学成什么样能在明年找到一个与C++相关的工作呢?如果我想做项目,应该从哪里开始呢?
#12
wengbin2015-12-02 11:33
回复 8楼 孤狼123
QQ:997062513
#13
农民工2015-12-07 11:13
我是97级的地理师范院校,毕业后 先找到一家作坊式软件公司做技术支持,做的时候自学编程 成为开发经理,后来再去大公司发展。总之,1要自己刻苦,2要有机遇,不会有一蹴而就的好事等着你
1