能力值:
( LV2,RANK:10 )
|
-
-
2 楼
第二问我知道一点点
*s="abcd",s是一个变量,编译器会为它分配一个空间。
s[]中,s是一个地址,编译器会为数组s分配一个空间,不会为s本身分配空间,s指向s[]的首地址
会有s=&s[0],*s=s[0]
|
能力值:
( LV3,RANK:30 )
|
-
-
3 楼
- -啥意思?~!没看懂。。。s[]的s不分配空间?~它不是一个char型指针吗?
|
能力值:
( LV9,RANK:200 )
|
-
-
4 楼
2.自己看内存 比别人讲得更直观
3.函数指针就只是函数的地址 类似于00400000之类的
搞那么多名堂是给程序员和编译器看的
4.<<的返回值为ostream&
|
能力值:
( LV3,RANK:30 )
|
-
-
5 楼
2. 怎么看内存?~
3. 我知道iostream.h里把cout定义成ostream&类型。但是把头文件改了也不能成功。。
|
能力值:
( LV9,RANK:200 )
|
-
-
6 楼
2. 晕,老师连这个都没教? 用编译器自带的调试器或者第三方调试器调试下 再打开内存窗口就可以了
4. cout是ostream类的实例对象 要改也是改成员方法<<的返回值
出了错要先从自己的代码找起阿
|
能力值:
(RANK:680 )
|
-
-
7 楼
你们老师在误人子弟..
void main()
{
char *s1="abcd";
char s2[] = "abcd";
...
}
s1在堆上. s2在栈中. (连个串都存在PE文件的数据区段.)
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
我在2楼的回答貌似让人看了更加不懂
我的表达能力太差了
楼主还是自己调试下吧
|
能力值:
( LV3,RANK:30 )
|
-
-
9 楼
[QUOTE=jackozoo;650791]你们老师在误人子弟..
void main()
{
char *s1="abcd";
char s2[] = "abcd";
...
}
s1在堆上. s2在栈中. (连个串都存在PE文件的数据区段.)[/QUOTE]
- -不好意思,我们还没学过计算机组成原理。。。S2在栈中,是指系统栈吗?堆又是什么?~
ps:谢谢各位的回答
|
能力值:
( LV9,RANK:170 )
|
-
-
10 楼
一个由 c/C++ 编译的程序占用的内存分为以下几个部分:
1 、栈区( stack )— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2 、堆区( heap )— 一般由程序员分配释放, 若程序员不释放,程序结束时可能由 OS 回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3 、全局区(静态区)( static )— 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由有系统释放。
4 、文字常量区 — 常量字符串就是放在这里的。程序结束后由系统释放。
5 、程序代码区 — 存放函数体的二进制代码。
|
能力值:
( LV3,RANK:30 )
|
-
-
11 楼
原来如此,很清楚~谢谢`
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
一个进程一个堆,一个线程一个栈
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
第2个问题:
如果声明的语法是
char *s = "hello world";
这样的时候,起始,这是c中的一种约定,其实 是分2步来实现的,首先为"hello world"这个字符串分配以个内存,然后在把这个内存的首地址传送到s变量中保存,相当于:
char array[] = "hello world";
char *s = &array[0];
但是这个数组是没有名字的,所以被称为"无名数组"。
第3个问题:
我觉得函数名就是这个函数的首地址,不过这个地址是在代码段中的,页就是jmp到这个地址来执行代码的意思,函数指针无非就是保存了这个地址,然后远程访问而已。
ps:以上观点属于个人意见,如果说错了,还请各位客气的指正,谢谢了。
|
能力值:
( LV3,RANK:30 )
|
-
-
14 楼
感谢楼上的回答。对于第3个问题,我曾经试过这样一个实验
首先定义一个函数比如叫fun();
然后 在main里
printf("%d,%d,%d",fun,&fun,*fun);
输出的结果是三个数值完全一样!!
我想,如果函数名只代表一个地址的话,断然不能有这样的输出结果吧。
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
楼上做的实验还真不知道怎么解释
我先调试下看
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
进来学习。。。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
刻录文件时 还要写磁盘扇区 以保证能启动
fun 函数名当然就是函数的地址
&fun 函数名的地址当然就是函数的地址
*fun 这个意思大概是指函数的值 他的值还是保存的函数地址吧
也是新手 解决不一定正确
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
C函数对应的汇编就是CALL,函数名就是这个call的入口地址。我是这样理解的,不知道正确否
|
|
|