#include <stdlib.h>
struct slist{
int data;
struct slist *next;
}
struct slist *create_slist()
{
int c;
struct slist *s,*h,*r;
h=(struct slist)malloc(sizeof(struct slist));
r=h;
scanf("%d",&c);
while(c!=-1)
{
s=(struct slist)malloc(sizeof(struct slist));
s->data=c;r->next=s;r=s;
scanf("%d",&c);
}
r->next ='\0';
return h;
}
main()
{
struct slist *head;
head=create_slist();
}
--------------------Configuration: Cpp1 - Win32 Debug--------------------
Compiling...
Cpp1.cpp
C:\Documents and Settings\Administrator\My Documents\Cpp1.cpp(7) : error C2236: unexpected 'struct' 'slist'
C:\Documents and Settings\Administrator\My Documents\Cpp1.cpp(11) : error C2440: 'type cast' : cannot convert from 'void *' to 'struct slist'
No constructor could take the source type, or constructor overload resolution was ambiguous
C:\Documents and Settings\Administrator\My Documents\Cpp1.cpp(16) : error C2440: 'type cast' : cannot convert from 'void *' to 'struct slist'
No constructor could take the source type, or constructor overload resolution was ambiguous
C:\Documents and Settings\Administrator\My Documents\Cpp1.cpp(29) : warning C4508: 'main' : function should return a value; 'void' return type assumed
执行 cl.exe 时出错.
Cpp1.obj - 1 error(s), 0 warning(s)
22 个解决方案
#1
struct slist{
int data;
struct slist *next;
}; //要加分号
h=(struct slist *)malloc(sizeof(struct slist)); //是指针
r->next ='\0'; //r->next = NULL;
就看出来这些,帮顶下
int data;
struct slist *next;
}; //要加分号
h=(struct slist *)malloc(sizeof(struct slist)); //是指针
r->next ='\0'; //r->next = NULL;
就看出来这些,帮顶下
#2
1L说得对!
1.strust slist类型定义要以‘;’号结束。
2.h=(struct slist *)malloc(sizeof(struct slist)); 向头指针赋值的应该是指向结构的指针,要对malloc函数的返回值进行强制类型转换
3.同上:s=(struct slist *)malloc(sizeof(struct slist)); 向s指针赋值的应该是指向结构的指针,要对malloc函数的返回值进行强制类型转换
1.strust slist类型定义要以‘;’号结束。
2.h=(struct slist *)malloc(sizeof(struct slist)); 向头指针赋值的应该是指向结构的指针,要对malloc函数的返回值进行强制类型转换
3.同上:s=(struct slist *)malloc(sizeof(struct slist)); 向s指针赋值的应该是指向结构的指针,要对malloc函数的返回值进行强制类型转换
#3
#include <stdio.h>
#include <stdlib.h>
struct slist{
int data;
struct slist *next;
};
struct slist *create_slist()
{
int c;
struct slist *s,*h,*r;
h=(struct slist*)malloc(sizeof(struct slist));
r=h;
r->next=NULL;
scanf("%d",&c);
while(c!=-1)
{
s=(struct slist*)malloc(sizeof(struct slist));
s->data=c;
s->next=r->next;
r->next=s;
scanf("%d",&c);
}
return h;
}
main()
{
struct slist *head;
head=create_slist();
}
应该是对的
#include <stdlib.h>
struct slist{
int data;
struct slist *next;
};
struct slist *create_slist()
{
int c;
struct slist *s,*h,*r;
h=(struct slist*)malloc(sizeof(struct slist));
r=h;
r->next=NULL;
scanf("%d",&c);
while(c!=-1)
{
s=(struct slist*)malloc(sizeof(struct slist));
s->data=c;
s->next=r->next;
r->next=s;
scanf("%d",&c);
}
return h;
}
main()
{
struct slist *head;
head=create_slist();
}
应该是对的
#4
没有加分号。
#5
3条error信息如1楼所说。
1条warning信息是因为main没返回值。
'\0'是专门判断字符串结尾的符号,不能用于其它场合。
1条warning信息是因为main没返回值。
'\0'是专门判断字符串结尾的符号,不能用于其它场合。
#6
r->next ='\0';
指针判空是用null的
指针判空是用null的
#7
#include <stdio.h>
#include <stdlib.h>
struct slist{
int data;
struct slist *next;
}; //这里要加分号
struct slist *create_slist()
{
int c;
struct slist *s,*h,*r;
h=(struct slist*)malloc(sizeof(struct slist));//转换为指针struct slist*,注意*号
r=h;
scanf("%d",&c);
while(c!=-1)
{
s=(struct slist)malloc(sizeof(struct slist));));//转换为指针struct slist*,注意*号
s->data=c;r->next=s;r=s;
scanf("%d",&c);
}
r->next ='\0';
return h;
}
int main() //返回值写int,这样习惯比较好
{
struct slist *head;
head=create_slist();
return 0; //返回0
}
#8
要加分号
#9
h=(struct slist)malloc(sizeof(struct slist));
s=(struct slist)malloc(sizeof(struct slist));
s=(struct slist)malloc(sizeof(struct slist));
#10
按ASCII码的表述'\0'就是NULL就等于0x00…只是它是字符…用个强制转换就可以了…也不是不可以用…
#11
楼上说完了
#12
struct slist{
int data;
struct slist *next;
}没带分号
int data;
struct slist *next;
}没带分号
#13
楼上 都说了 顺便提一下 NULL一定要大写 小写会报错
#14
再教你一个 发代码的时候在编辑框上有一个文件上面带个# 点一下
code=C/C++]
把代码写在中间好看
[/code
code=C/C++]
把代码写在中间好看
[/code
别人看着容易 代码加点注释 有满意答案要知道结贴 在标题的左上方 就这些了
#include<stdio.>
int main()
{
return 0;
}
#15
编译没有错误 连接的时候出现这个问题怎么回事???
--------------------Configuration: Cpp1 - Win32 Debug--------------------
Linking...
Cpp1.obj : error LNK2001: unresolved external symbol "void * __cdecl malloc(unsigned int)" (?malloc@@YAPAXI@Z)
Debug/Cpp1.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.
Cpp1.exe - 1 error(s), 0 warning(s)
--------------------Configuration: Cpp1 - Win32 Debug--------------------
Linking...
Cpp1.obj : error LNK2001: unresolved external symbol "void * __cdecl malloc(unsigned int)" (?malloc@@YAPAXI@Z)
Debug/Cpp1.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.
Cpp1.exe - 1 error(s), 0 warning(s)
#16
试着加注释
错误就好找多了
错误就好找多了
#17
两个错误,一个建议
1.定义结构体的时候 结尾 没有分号。即:
struct slist{
int data;
struct slist *next;
}; //这里
2.创建新节点分配内存空间的时候,类型应该为指向结构体的指针类型。验证了报错:
C:\Documents and Settings\Administrator\My Documents\Cpp1.cpp(16) : error C2440: 'type cast' : cannot convert from 'void *' to 'struct slist'
h=(struct slist *)malloc(sizeof(struct slist));
3.建议,用 typedef 定义下结构体,可以省事多了。
typedef struct slist
{
......
}NEW_NODE;
后面都用 NEW_NODE ~
1.定义结构体的时候 结尾 没有分号。即:
struct slist{
int data;
struct slist *next;
}; //这里
2.创建新节点分配内存空间的时候,类型应该为指向结构体的指针类型。验证了报错:
C:\Documents and Settings\Administrator\My Documents\Cpp1.cpp(16) : error C2440: 'type cast' : cannot convert from 'void *' to 'struct slist'
h=(struct slist *)malloc(sizeof(struct slist));
3.建议,用 typedef 定义下结构体,可以省事多了。
typedef struct slist
{
......
}NEW_NODE;
后面都用 NEW_NODE ~
#18
两个错误,一个建议
1.定义结构体的时候 结尾 没有分号。即:
struct slist{
int data;
struct slist *next;
}; //这里
2.创建新节点分配内存空间的时候,类型应该为指向结构体的指针类型。验证了报错:
C:\Documents and Settings\Administrator\My Documents\Cpp1.cpp(16) : error C2440: 'type cast' : cannot convert from 'void *' to 'struct slist'
h=(struct slist *)malloc(sizeof(struct slist));
3.建议,用 typedef 定义下结构体,可以省事多了。
typedef struct slist
{
......
}NEW_NODE;
后面都用 NEW_NODE ~
1.定义结构体的时候 结尾 没有分号。即:
struct slist{
int data;
struct slist *next;
}; //这里
2.创建新节点分配内存空间的时候,类型应该为指向结构体的指针类型。验证了报错:
C:\Documents and Settings\Administrator\My Documents\Cpp1.cpp(16) : error C2440: 'type cast' : cannot convert from 'void *' to 'struct slist'
h=(struct slist *)malloc(sizeof(struct slist));
3.建议,用 typedef 定义下结构体,可以省事多了。
typedef struct slist
{
......
}NEW_NODE;
后面都用 NEW_NODE ~
#19
还有一点:
r->next ='\0';
\0 是判断字符串指针的时候用。链表用 NULL 。
r->next ='\0';
\0 是判断字符串指针的时候用。链表用 NULL 。
#20
都是一些基本的错误,细心一点就好了。
#21
struct slist{
int data;
struct slist *next;
} 后面要加上;号
int data;
struct slist *next;
} 后面要加上;号
#22
关于自己是否适合编程的很简单的测试:
在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案:
A里面有10处以上文字或标点错误
B里面没有文字或标点错误并敢为此跟人打赌
C里面没有文字或标点错误并且字体和排版完全与原稿一致
D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感
A不适合编程(理由:打字准确度偏低、粗心大意)
B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念)
C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证)
D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!)
如果想从A变成B的话,到我的资源 http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”
内存地址→指针→链表
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
提醒:
“学习用汇编语言写程序”
和
“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
不要写连自己也预测不了结果的代码!
在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案:
A里面有10处以上文字或标点错误
B里面没有文字或标点错误并敢为此跟人打赌
C里面没有文字或标点错误并且字体和排版完全与原稿一致
D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感
A不适合编程(理由:打字准确度偏低、粗心大意)
B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念)
C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证)
D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!)
如果想从A变成B的话,到我的资源 http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”
内存地址→指针→链表
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
提醒:
“学习用汇编语言写程序”
和
“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
不要写连自己也预测不了结果的代码!
#1
struct slist{
int data;
struct slist *next;
}; //要加分号
h=(struct slist *)malloc(sizeof(struct slist)); //是指针
r->next ='\0'; //r->next = NULL;
就看出来这些,帮顶下
int data;
struct slist *next;
}; //要加分号
h=(struct slist *)malloc(sizeof(struct slist)); //是指针
r->next ='\0'; //r->next = NULL;
就看出来这些,帮顶下
#2
1L说得对!
1.strust slist类型定义要以‘;’号结束。
2.h=(struct slist *)malloc(sizeof(struct slist)); 向头指针赋值的应该是指向结构的指针,要对malloc函数的返回值进行强制类型转换
3.同上:s=(struct slist *)malloc(sizeof(struct slist)); 向s指针赋值的应该是指向结构的指针,要对malloc函数的返回值进行强制类型转换
1.strust slist类型定义要以‘;’号结束。
2.h=(struct slist *)malloc(sizeof(struct slist)); 向头指针赋值的应该是指向结构的指针,要对malloc函数的返回值进行强制类型转换
3.同上:s=(struct slist *)malloc(sizeof(struct slist)); 向s指针赋值的应该是指向结构的指针,要对malloc函数的返回值进行强制类型转换
#3
#include <stdio.h>
#include <stdlib.h>
struct slist{
int data;
struct slist *next;
};
struct slist *create_slist()
{
int c;
struct slist *s,*h,*r;
h=(struct slist*)malloc(sizeof(struct slist));
r=h;
r->next=NULL;
scanf("%d",&c);
while(c!=-1)
{
s=(struct slist*)malloc(sizeof(struct slist));
s->data=c;
s->next=r->next;
r->next=s;
scanf("%d",&c);
}
return h;
}
main()
{
struct slist *head;
head=create_slist();
}
应该是对的
#include <stdlib.h>
struct slist{
int data;
struct slist *next;
};
struct slist *create_slist()
{
int c;
struct slist *s,*h,*r;
h=(struct slist*)malloc(sizeof(struct slist));
r=h;
r->next=NULL;
scanf("%d",&c);
while(c!=-1)
{
s=(struct slist*)malloc(sizeof(struct slist));
s->data=c;
s->next=r->next;
r->next=s;
scanf("%d",&c);
}
return h;
}
main()
{
struct slist *head;
head=create_slist();
}
应该是对的
#4
没有加分号。
#5
3条error信息如1楼所说。
1条warning信息是因为main没返回值。
'\0'是专门判断字符串结尾的符号,不能用于其它场合。
1条warning信息是因为main没返回值。
'\0'是专门判断字符串结尾的符号,不能用于其它场合。
#6
r->next ='\0';
指针判空是用null的
指针判空是用null的
#7
#include <stdio.h>
#include <stdlib.h>
struct slist{
int data;
struct slist *next;
}; //这里要加分号
struct slist *create_slist()
{
int c;
struct slist *s,*h,*r;
h=(struct slist*)malloc(sizeof(struct slist));//转换为指针struct slist*,注意*号
r=h;
scanf("%d",&c);
while(c!=-1)
{
s=(struct slist)malloc(sizeof(struct slist));));//转换为指针struct slist*,注意*号
s->data=c;r->next=s;r=s;
scanf("%d",&c);
}
r->next ='\0';
return h;
}
int main() //返回值写int,这样习惯比较好
{
struct slist *head;
head=create_slist();
return 0; //返回0
}
#8
要加分号
#9
h=(struct slist)malloc(sizeof(struct slist));
s=(struct slist)malloc(sizeof(struct slist));
s=(struct slist)malloc(sizeof(struct slist));
#10
按ASCII码的表述'\0'就是NULL就等于0x00…只是它是字符…用个强制转换就可以了…也不是不可以用…
#11
楼上说完了
#12
struct slist{
int data;
struct slist *next;
}没带分号
int data;
struct slist *next;
}没带分号
#13
楼上 都说了 顺便提一下 NULL一定要大写 小写会报错
#14
再教你一个 发代码的时候在编辑框上有一个文件上面带个# 点一下
code=C/C++]
把代码写在中间好看
[/code
code=C/C++]
把代码写在中间好看
[/code
别人看着容易 代码加点注释 有满意答案要知道结贴 在标题的左上方 就这些了
#include<stdio.>
int main()
{
return 0;
}
#15
编译没有错误 连接的时候出现这个问题怎么回事???
--------------------Configuration: Cpp1 - Win32 Debug--------------------
Linking...
Cpp1.obj : error LNK2001: unresolved external symbol "void * __cdecl malloc(unsigned int)" (?malloc@@YAPAXI@Z)
Debug/Cpp1.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.
Cpp1.exe - 1 error(s), 0 warning(s)
--------------------Configuration: Cpp1 - Win32 Debug--------------------
Linking...
Cpp1.obj : error LNK2001: unresolved external symbol "void * __cdecl malloc(unsigned int)" (?malloc@@YAPAXI@Z)
Debug/Cpp1.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.
Cpp1.exe - 1 error(s), 0 warning(s)
#16
试着加注释
错误就好找多了
错误就好找多了
#17
两个错误,一个建议
1.定义结构体的时候 结尾 没有分号。即:
struct slist{
int data;
struct slist *next;
}; //这里
2.创建新节点分配内存空间的时候,类型应该为指向结构体的指针类型。验证了报错:
C:\Documents and Settings\Administrator\My Documents\Cpp1.cpp(16) : error C2440: 'type cast' : cannot convert from 'void *' to 'struct slist'
h=(struct slist *)malloc(sizeof(struct slist));
3.建议,用 typedef 定义下结构体,可以省事多了。
typedef struct slist
{
......
}NEW_NODE;
后面都用 NEW_NODE ~
1.定义结构体的时候 结尾 没有分号。即:
struct slist{
int data;
struct slist *next;
}; //这里
2.创建新节点分配内存空间的时候,类型应该为指向结构体的指针类型。验证了报错:
C:\Documents and Settings\Administrator\My Documents\Cpp1.cpp(16) : error C2440: 'type cast' : cannot convert from 'void *' to 'struct slist'
h=(struct slist *)malloc(sizeof(struct slist));
3.建议,用 typedef 定义下结构体,可以省事多了。
typedef struct slist
{
......
}NEW_NODE;
后面都用 NEW_NODE ~
#18
两个错误,一个建议
1.定义结构体的时候 结尾 没有分号。即:
struct slist{
int data;
struct slist *next;
}; //这里
2.创建新节点分配内存空间的时候,类型应该为指向结构体的指针类型。验证了报错:
C:\Documents and Settings\Administrator\My Documents\Cpp1.cpp(16) : error C2440: 'type cast' : cannot convert from 'void *' to 'struct slist'
h=(struct slist *)malloc(sizeof(struct slist));
3.建议,用 typedef 定义下结构体,可以省事多了。
typedef struct slist
{
......
}NEW_NODE;
后面都用 NEW_NODE ~
1.定义结构体的时候 结尾 没有分号。即:
struct slist{
int data;
struct slist *next;
}; //这里
2.创建新节点分配内存空间的时候,类型应该为指向结构体的指针类型。验证了报错:
C:\Documents and Settings\Administrator\My Documents\Cpp1.cpp(16) : error C2440: 'type cast' : cannot convert from 'void *' to 'struct slist'
h=(struct slist *)malloc(sizeof(struct slist));
3.建议,用 typedef 定义下结构体,可以省事多了。
typedef struct slist
{
......
}NEW_NODE;
后面都用 NEW_NODE ~
#19
还有一点:
r->next ='\0';
\0 是判断字符串指针的时候用。链表用 NULL 。
r->next ='\0';
\0 是判断字符串指针的时候用。链表用 NULL 。
#20
都是一些基本的错误,细心一点就好了。
#21
struct slist{
int data;
struct slist *next;
} 后面要加上;号
int data;
struct slist *next;
} 后面要加上;号
#22
关于自己是否适合编程的很简单的测试:
在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案:
A里面有10处以上文字或标点错误
B里面没有文字或标点错误并敢为此跟人打赌
C里面没有文字或标点错误并且字体和排版完全与原稿一致
D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感
A不适合编程(理由:打字准确度偏低、粗心大意)
B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念)
C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证)
D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!)
如果想从A变成B的话,到我的资源 http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”
内存地址→指针→链表
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
提醒:
“学习用汇编语言写程序”
和
“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
不要写连自己也预测不了结果的代码!
在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案:
A里面有10处以上文字或标点错误
B里面没有文字或标点错误并敢为此跟人打赌
C里面没有文字或标点错误并且字体和排版完全与原稿一致
D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感
A不适合编程(理由:打字准确度偏低、粗心大意)
B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念)
C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证)
D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!)
如果想从A变成B的话,到我的资源 http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”
内存地址→指针→链表
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
提醒:
“学习用汇编语言写程序”
和
“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
不要写连自己也预测不了结果的代码!