70,040
社区成员
发帖
与我相关
我的任务
分享#include<stdio.h>
struct test
{
int x;
int cur;
};
struct test *create(int n)
{
struct test L[100];
int i;
L[0].cur = 1;
for (i = 1; i <=n; i++)
{
scanf("%d", &L[i].x);
L[i].cur = i + 1;
}
return L;
}
int Locate(struct test *L,int e)
{
int i;
i = L[0].cur;
while (i&&L[i].x != e)
i = L[i].cur;
return i;
}
void print(struct test *L,int n)
{
int i;
for (i = 1; i <= n; i++)
{
printf("%d\n", L[i].x);
}
}
int main()
{
struct test *S;
int n,e,a;
printf("请输入要创建的链表数:");
scanf("%d", &n);
S = create(n);
printf("请输入要查找的数字:");
scanf("%d", &e);
printf("%d", Locate(S, e));
}

理解和讨论之前请先学会如何观察!
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
对学习编程者的忠告:
多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程!
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步Debug版对应汇编一行!
单步Debug版对应汇编千行不如单步Release版对应汇编一行!
不会单步Release版对应汇编?在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有,然后在IDE中运行。(一般人我不告诉他!
)
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
#include<stdio.h>
int *kk()
{
int a[2] = { 1, 2 };
return a;
}
int main()
{
int *b;
b = kk();
printf("%d", b[0]);
}
那请问一下为什么a没有被释放,可以打印出来。。小白勿喷。。struct test L[100];改成struct test ×L = (struct test *)malloc(sizeof(struct test)*n)#include<stdio.h>
int *kk()
{
int a[2] = { 1, 2 };
return a;
}
int main()
{
int *b;
b = kk();
printf("%d", b[0]);
}
那请问一下为什么a没有被释放,可以打印出来。。小白勿喷。。[/quote]
我终于弄明白了,如果在printf前面再加个printf栈内存就被覆盖了,而堆就不会,谢谢大家