c语言小问题

hit56工作室 2007-12-21 01:29:19
#include <stdio.h>
void init(int *s)
{
s=(int *)malloc(4*sizeof(int));
s[0]=1;
s[1]=2;
s[2]=3;
s[3]=4;
}
int main(void)
{
int *s;
init(&s);
printf("%d %d %d %d",s[0],s[1],s[2],s[3]);
getch();
return 0;
}
为什么结果是0 0 0 0
而不是1 2 3 4
...全文
400 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
WEN2222 2007-12-26
  • 打赏
  • 举报
回复
init(s); 这样就行
一生有爱1980 2007-12-26
  • 打赏
  • 举报
回复
同意2楼的意见
chen_liang747703 2007-12-25
  • 打赏
  • 举报
回复
顶9楼!
Holinan 2007-12-25
  • 打赏
  • 举报
回复
最近发这个类似问题的还不少
推荐看下<高质量D编程>啊

void init(int **s)
{
*s=(int *)malloc(4*sizeof(int));
*s[0]=1;
*s[1]=2;
*s[2]=3;
*s[3]=4;
}

lanmansize 2007-12-25
  • 打赏
  • 举报
回复
#include <stdio.h>
void init(int **s)
{
*s=(int *)malloc(4*sizeof(int));
s[0]=1;
s[1]=2;
s[2]=3;
s[3]=4;
}
int main(void)
{
int *s[3];
init(&s);
printf("%d %d %d %d",s[0],s[1],s[2],s[3]);
getch();
free(&s);
return 0;
}
gold_wings 2007-12-25
  • 打赏
  • 举报
回复
#include   <stdio.h> 
#include <stdlib.h>
void init(int *s)
{
s[0]=1;
s[1]=2;
s[2]=3;
s[3]=4;
}
int main(void)
{
int *s;
s=(int *)malloc(4*sizeof(int));
init(s);
printf("%d %d %d %d",s[0],s[1],s[2],s[3]);
getch();
return 0;
}

星光伴月 2007-12-25
  • 打赏
  • 举报
回复
2楼的我搞错了,惭愧.
ReloadMatrix 2007-12-25
  • 打赏
  • 举报
回复
其实 是你欺骗了编译器 在Init中 形参是int* 而你实际传入的是int** 而这样的错误compiler是检查不出来的 所以出现了你一些你意想不到的错误 呵呵
vecshid 2007-12-25
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
void init(int **s)
{
*s=(int *)malloc(2*sizeof(int));
**s=1;
*(*s+1)=2;
}
int main(void)
{
int *s;
init(&s);
printf("%d %d",s[0],s[1]);
free(s);
getch();
return 0;
}
yu_xm 2007-12-25
  • 打赏
  • 举报
回复
C++的话可以传指针的引用
比指针的指针好理解点
温飞_会员 2007-12-25
  • 打赏
  • 举报
回复
加强记忆啊!
int *s;
int *k;
init(int *s);


init(k);
=============
int *k;
init(int **s);

init(&k);
pptor 2007-12-25
  • 打赏
  • 举报
回复
帮你测试过了啊 ,输出1,2,3,4
pptor 2007-12-25
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <malloc.h>
void init(int * &s)
{
s=(int *)malloc(4*sizeof(int));
s[0]=1;
s[1]=2;
s[2]=3;
s[3]=4;
}
int main(void)
{
int *s;
init(s);
printf("%d\t%d\t%d\t%d\n",s[0],s[1],s[2],s[3]);
if(s) free(s);
return 0;
}
用引用就好了啊,多简单
prime1213 2007-12-23
  • 打赏
  • 举报
回复
up
zhangshunxing 2007-12-23
  • 打赏
  • 举报
回复

想了解更多的技术 请进纯c语言群:49465070
ljsunlin 2007-12-22
  • 打赏
  • 举报
回复
唉,回复的怎么都是些菜鸟啊

我简单写下

你把 int *s; 改成int s[4];

或者你非要显示用指针的话改成
int a[4];
int *s=a;

或者你非要使用堆的话
int *s=(int *)malloc(sizeof(int)*4);
不过后面要用free(s);

我的E-mail:ljsunlin@126.com

可以找我编写程序
Just4life 2007-12-22
  • 打赏
  • 举报
回复
我记得malloc()分配的内存是在栈中的,LZ那样分配,当函数调用结束后,内存是会被释放的,可以像6楼那样,就没有问题
羽中漫步 2007-12-22
  • 打赏
  • 举报
回复
是啊,C的精华就是 指针,学好指针就是C高手了。内存泄漏是会死人的,高质量的C编程里面讲的不错,值得学习和应用。
飞哥 2007-12-22
  • 打赏
  • 举报
回复
像你那样,会造成内存泄漏
飞哥 2007-12-22
  • 打赏
  • 举报
回复
可能你对编译器不是很了解
你这种通过int*s
一个*的是无法返回申请的空间的,所以代码会出现那种现象
why:

因为传入参数,编译器会为参数生成副本,实际上副本得到了分配的空间,但是无法传递给原始参数

需要使用 int **s
why:
这样会返回申请空间的地址。

仔细理解理解
加载更多回复(11)

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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