(晨星)、(天上的肥鸭不怕C++,就怕开水烫)两位大哥,为什么你们能对c++底层能这么了解呢?

cowboy2006 2003-07-10 11:17:34
???
你们学c++有多长时间了?
工作了吗?工作了有多长时间了?
...全文
132 55 打赏 收藏 转发到动态 举报
写回复
用AI写文章
55 条回复
切换为时间正序
请发表友善的回复…
发表回复
iNothing 2003-08-12
  • 打赏
  • 举报
回复
kao,玩BT啊?
#include <stdio.h>

char *GetMemory(void)
{
char *p;
_asm
{
jmp addr1
addr:
_emit 'H'
_emit 'e'
_emit 'l'
_emit 'l'
_emit 'o'
_emit ' '
_emit 'w'
_emit 'o'
_emit 'r'
_emit 'l'
_emit 'd'
_emit '!'
_emit 0x0a
_emit 0x0
addr1:
mov eax, offset addr
mov p, eax
}
return p;
}

void main(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
//putchar('\n');
}
Congy 2003-07-17
  • 打赏
  • 举报
回复
void foo(char const ** const p)
{
const char q[] = "world, hello!\n";

*p = q;
};

int __cdecl main()
{
char const * const p = "hello, world!\n";
char const ** const pp = (char const ** const)&p;
foo(pp);
printf("%s", *pp);
return 0;
}
大家猜,这个的结果又怎样??
bluedodo 2003-07-12
  • 打赏
  • 举报
回复
跟一跟,起床接着看
frankMasson 2003-07-11
  • 打赏
  • 举报
回复
先前看到一个另类版的 hello world,顺道贴过来.
cow 先不要编译,考虑一下它的结果.

#include<stdio.h>

void foo(char ** p)
{
*p = "world, hello!\n";
}

int __cdecl main()
{
char *p = "hello, cow \n";
foo(&p);
printf("%s", p);
return 0;

}
晨星 2003-07-11
  • 打赏
  • 举报
回复
哦,目前还是学生,只是在做兼职。
业余喜欢听大戏,:)。最喜欢的演员:于魁智、邓沐玮。
leeseon 2003-07-11
  • 打赏
  • 举报
回复
楼上的------经典经典

拍马屁的--------不是不是
晨星 2003-07-11
  • 打赏
  • 举报
回复
呵呵,兄弟对C++的底层知之甚少,只是近来到CSDN上泡的时间比较多,所以给楼主造成了这种错觉。
这两年,在C++上的确有所提高,主要靠CSDN上网友的帮助。
大家互相学习吧。


oldgameman 2003-07-11
  • 打赏
  • 举报
回复
呵呵...
虚心学习请教的---可以可以.

拍马屁的---不要不要.

<<C++ PRIMER>>---要得要得.

<<THE C++ PROGRAMMING LANGUAGE>>,<<C++标准库>>,<<编译原理>>,<<线代>>,<<离散>>,<<数据结构>>,<<操作系统>>,<<计算机体系结构>>....---更高更高.

4分理论6分实践---王道王道.

xclovejjforever 2003-07-11
  • 打赏
  • 举报
回复
#include <stdio.h>
void foo(char **s)
{
printf("s address is :%xd\n *s address is :%d\n &s address is :%xd\n", s, *s, &s);
*s="Hello!";
printf("s address is :%xd\n *s address is :%d\n &s address is :%xd\n", s, *s, &s);
}

int main(void)
{


char *p="World";
printf("%xd\n",&p);
foo(&p);
printf("%s", p);
printf("%xd\n", &p);
return 0;
}

如果这样的话,因该就是一目了然了吧!~

结果里面只有一个地址的变化!~
frankMasson 2003-07-11
  • 打赏
  • 举报
回复
你看就不要大哥前大哥后的了,我比你大不了多少,简单点叫肥鸭吧.

我的工作主要是搞 DirectX 方面的东西.对 C++ 的底层了解实在不敢说.当年在学校时很多东西都还没整明白,自己稀里糊涂地就拿了毕业证,其实许多的知识是在工作中恶补的.虽然工作有两年多了,慢慢地才发现,以前大学里的一些书不知从何时开始,又出现在了自己的工作台前.这里面有线性代数,有汇编,有编译原理,有数据结构,当然,也有一本<<c++ primer>>.

我想吧,有一些东西,在一开始的时候就能正确地了解它的本质,虽然困难,虽然可能会由这次次的失败而感到痛苦.但有一天,你看到你的同事为自己写的一段程序反复调试而抓狂的时候,你会知道你以前的付出绝对是有价值的.

其实,有很多我们看起来并不起眼的东西,里边都有意想不到的宝贵经验.

举个例子, 像 cout 这一个十分简单明了的小东西,楼主可曾看过它实现的代码?还有标准C/C++的标准库函数,能否自己试着实现几个? 然后看看自己的方法和库提供的有何不同,孰优孰劣? 看一看编译器在编译这些个东西的时候,都干了一些什么,把一些小例子,在汇编下调试一下,跟一跟,不需要太多的时间(相对而言), cow 兄成大师矣.

ps.业余我喜欢弹古典吉它,说我对c++底层很了解,我实在受不起,但说我对古典吉它很有研究,那是当仁不让的.
beistone 2003-07-11
  • 打赏
  • 举报
回复
up
penter 2003-07-11
  • 打赏
  • 举报
回复
mark;
idontlikenickname 2003-07-11
  • 打赏
  • 举报
回复


还是这个坛子气氛好~
有这么多可以相互切磋的朋友,又有这么负责任的斑竹.
en~~心情愉快~~~

cowboy2006 2003-07-11
  • 打赏
  • 举报
回复
#include<stdio.h>

void foo(char ** q)
{
*q = "world, hello!\n";
}

int __cdecl main()
{
char *p = "hello, cow \n";
foo(&p);
printf("%s", p);
return 0;

}
好象想通了:
q=&p(函数参数传递时)
*q="world, hello!\n"; => p="world, hello!\n";

所以是"world, hello!\n";
darcymei 2003-07-11
  • 打赏
  • 举报
回复
问个问题:像这样的常量字符串是不是像汇编的伪指令一样,在生成exe是直接加载在内存的数据段里?
frankMasson 2003-07-11
  • 打赏
  • 举报
回复
to cow:

我QQ基本不用,现在只有 msn

frankmasson2003@hotmail.com
Flamesong 2003-07-11
  • 打赏
  • 举报
回复
看不出楼上的例子有何高深,望各位指教。
snipersu 2003-07-11
  • 打赏
  • 举报
回复
常量的问题,指针的指针的问题。
^v^
晨星 2003-07-11
  • 打赏
  • 举报
回复
真的有那么麻烦吗?
我觉得这个程序在理解上无非就是两点需要注意:
(1)通过用二级指针做函数参数可以在函数内通过形参来修改二级指针的内容,即一级指针。此程序中就使二级指针指向的一级指针重新指向了新的字符串。
(2)字符串常量保存在静态存储区中,所以函数返回后,它依然存在,可以被打印。不像一般的局部变量,如果函数退出后还引用,会很危险。
frankzch 2003-07-11
  • 打赏
  • 举报
回复
to 小欧:
char *p="hello cow\n"等价于 char *p;p="hello cow\n";是对指针p的初始化,由于指针p是指针变量,所以他可以任意改变指向(能不能改变内容决定于指针本身,常量指针才不能改变内容)
例程很清晰,没有任何问题,主要是考虑一个“指向指针的指针”问题
程序先进入main里面,p1是一个指针,令q=&p1,q的内容(*q)为p1的地址;
接着在foo里面,p2是一个指向指针的指针,不妨令指针r=*p2,因为把&p1传递给**p2,所以r的内容(*r=**p2)就是p1的地址(&p1),所以r=q,并且r和q是共用一块存储区域,修改r就修改了q,所以结果肯定是“world,hello!\n";
加载更多回复(35)

64,680

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧