| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 550 人关注过本帖
标题:新 手 C++ 字符串和指针的关系求 助
只看楼主 加入收藏
mnb1237273
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-6-1
结帖率:0
收藏
 问题点数:0 回复次数:3 
新 手 C++ 字符串和指针的关系求 助
  各位大哥大姐,小弟刚学c++到类,书中有个小程序小弟没看明白呀,还请指教:
  其他不重要的就不写了,就写不明白的语句哈。
  viod Ccar :: SetModel (char *model) //Ccar是用class定义的一个类的名字。
  {
      strcpy(m_model, model);        //m_model Ccar中的成员变量且私有的。
  }
主函数中有如下语句: Ccar mycar, yourcar;
                     mycar.SetModel("santana 2000");
                //小弟主要不明白的就是倒数上去的第一条语句和第三条语句。mycar.SetModel("santana 2000"); 这条语句是直接一字符串当成参数传了过去,但是函数那边的形参是指针类型的啊?传的地址?好像传地址不是这样的啊?传的字符串?好像也不对呀?并且函数体里复制的直接是形参名字。这是什么意思啊?
搜索更多相关主题的帖子: santana 字符串 大哥 
2014-07-26 23:24
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
请看这个例子及其反汇编代码:

程序代码:
#include <stdio.h>

void a(char* p)
{
    printf("%s\n",p);
}

int main(void)
{
    a("This is a test text.");
    return 0;
}


反汇编后代码:

程序代码:
00401000 >/$ 55             PUSH EBP
00401001  |. 8BEC           MOV EBP,ESP
00401003  |. 8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
00401006  |. 50             PUSH EAX                                 ; /<%s>
00401007  |. 68 EC204000    PUSH w5.004020EC                         ; |format = "%s\n"
0040100C  |. FF15 A0204000  CALL DWORD PTR DS:[<&MSVCR100.printf>]   ; \printf
00401012  |. 83C4 08        ADD ESP,8
00401015  |. 5D             POP EBP
00401016  \. C3             RETN

  
00401020 >/$ 55             PUSH EBP
00401021  |. 8BEC           MOV EBP,ESP
00401023  |. 68 F0204000    PUSH w5.004020F0                         ; /Arg1 = 004020F0 ASCII "This is a test text."
00401028  |. E8 D3FFFFFF    CALL w5.a                                ; \a
0040102D  |. 83C4 04        ADD ESP,4
00401030  |. 33C0           XOR EAX,EAX
00401032  |. 5D             POP EBP
00401033  \. C3             RETN




请注意这行:
00401023  |. 68 F0204000    PUSH w5.004020F0                         ; /Arg1 = 004020F0 ASCII "This is a test text."
这里直接push的就是字符串的首地址  也就是所谓的指针  对应源代码    a("This is a test text.");

[ 本帖最后由 wp231957 于 2014-7-28 13:59 编辑 ]

DO IT YOURSELF !
2014-07-28 13:56
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1506
专家分:9241
注 册:2010-3-16
收藏
得分:0 
字符串就是一个字符数组,数组名是这个字符串的指针,这里传递的就是这个字符的指针。
2014-07-28 14:36
小旋风小王爷
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-7-30
收藏
得分:0 
应该是这样的,子符串转化为对象,SetModel函数接收的是一个子符串首地址,也就是接收一个字符串对象,这个程序应该可以动行的
2014-07-30 15:16
快速回复:新 手 C++ 字符串和指针的关系求 助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.062852 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved