C语言指针赋初值问题
5个回答
展开全部
哥们,你写代码的能力实在是令在下佩服,这么短的代码居然出了这么多错误。
1)如果用指针要分配空间
如果这样
int
a;
int
*p;
p
=
a;
在定义int
a;时系统自动为a分配了栈上的空间,后面的p只是指向了a
但是如果是
int
*p;这样的p只是一个指针,并没有指向哪段空间,你就要手动为它开辟空间了int
*p
=
malloc(sizeof(int));
这是手动为其分配了堆上的空间。
2)用指针执行赋值操作时应该是
*c=*p1;
而不是
c=p1;
是指针p1指向的空间中的内容
赋值给
指针c指向的内容,不是指针赋值给指针
3)太粗心
if(*p1>*p2)
{c=p1;p2=p3;p2=c;}
你自己看看这是什么意思,谁和谁交换的?
1)如果用指针要分配空间
如果这样
int
a;
int
*p;
p
=
a;
在定义int
a;时系统自动为a分配了栈上的空间,后面的p只是指向了a
但是如果是
int
*p;这样的p只是一个指针,并没有指向哪段空间,你就要手动为它开辟空间了int
*p
=
malloc(sizeof(int));
这是手动为其分配了堆上的空间。
2)用指针执行赋值操作时应该是
*c=*p1;
而不是
c=p1;
是指针p1指向的空间中的内容
赋值给
指针c指向的内容,不是指针赋值给指针
3)太粗心
if(*p1>*p2)
{c=p1;p2=p3;p2=c;}
你自己看看这是什么意思,谁和谁交换的?
展开全部
int
*p1=0,*p2=0,*p3=0;这里赋的是地址,指针都指向地址为0的空间就是空指针,没有实体存在,所以后便全错了。
#include
#include
void
main()
{
int
*p1=(int
*)malloc(sizeof(int)),*p2=(int
*)malloc(sizeof(int)),*p3=(int
*)malloc(sizeof(int)),*c;
*p1=0;
*p2=0;
*p3=0;
printf("请输入任意三个整数(中间以空格隔开:)");
scanf("%d
%d
%d",p1,p2,p3);
if(*p1>*p2)
{c=p1;p1=p2;p2=c;}
if(*p2>*p3)
{c=p2;p2=p3;p3=c;}
if(*p1>*p2)
{c=p1;p1=p2;p2=c;}
printf("%d,%d,%d\n",*p1,*p2,*p3);
}
一楼说的是对的,回答问题是并行的,早知道他答了,我就不回答了,还有你的数值交换还存在很大的问题。你自己看看吧。
*p1=0,*p2=0,*p3=0;这里赋的是地址,指针都指向地址为0的空间就是空指针,没有实体存在,所以后便全错了。
#include
#include
void
main()
{
int
*p1=(int
*)malloc(sizeof(int)),*p2=(int
*)malloc(sizeof(int)),*p3=(int
*)malloc(sizeof(int)),*c;
*p1=0;
*p2=0;
*p3=0;
printf("请输入任意三个整数(中间以空格隔开:)");
scanf("%d
%d
%d",p1,p2,p3);
if(*p1>*p2)
{c=p1;p1=p2;p2=c;}
if(*p2>*p3)
{c=p2;p2=p3;p3=c;}
if(*p1>*p2)
{c=p1;p1=p2;p2=c;}
printf("%d,%d,%d\n",*p1,*p2,*p3);
}
一楼说的是对的,回答问题是并行的,早知道他答了,我就不回答了,还有你的数值交换还存在很大的问题。你自己看看吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int
*p1,*p2,*p3,c;
p1=(int
*)malloc(sizeof(int));
p2=(int
*)malloc(sizeof(int));
p3=(int
*)malloc(sizeof(int));
//
int
x,y,z;
printf("请输入任意三个整数(中间以空格隔开:)");
scanf("%d
%d
%d",p1,p2,p3);
注意给指针分配内存空间,还有参考其他的的同学给建议。练指针建议直接写string.h里的函数:
试着实现以下函数,对指针的理解会有很大帮助:
#ifndef
_MY_STRING_H
#define
_MY_STRING_H
char
*
my_strcpy(char
*
dest,const
char
*src);
char
*
strcat(char
*
dest,
const
char
*
src);
int
my_strcmp(const
char
*
cs,const
char
*
ct);
int
my_strlen(const
char
*
s);
void
*
memset(void
*
s,int
c,int
count);
void
*
memcpy(void
*
dest,const
void
*src,int
count);
void
*
memmove(void
*
dest,const
void
*src,int
count)
#endif
*p1,*p2,*p3,c;
p1=(int
*)malloc(sizeof(int));
p2=(int
*)malloc(sizeof(int));
p3=(int
*)malloc(sizeof(int));
//
int
x,y,z;
printf("请输入任意三个整数(中间以空格隔开:)");
scanf("%d
%d
%d",p1,p2,p3);
注意给指针分配内存空间,还有参考其他的的同学给建议。练指针建议直接写string.h里的函数:
试着实现以下函数,对指针的理解会有很大帮助:
#ifndef
_MY_STRING_H
#define
_MY_STRING_H
char
*
my_strcpy(char
*
dest,const
char
*src);
char
*
strcat(char
*
dest,
const
char
*
src);
int
my_strcmp(const
char
*
cs,const
char
*
ct);
int
my_strlen(const
char
*
s);
void
*
memset(void
*
s,int
c,int
count);
void
*
memcpy(void
*
dest,const
void
*src,int
count);
void
*
memmove(void
*
dest,const
void
*src,int
count)
#endif
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include
"stdio.h"
void
main(
)
{
int
i=10;
int
*p;
p=&i;
printf("%d",*p);
}
应该是这样,将i的地址给p,相当于这样的程序
#include
"stdio.h"
void
main(
)
{
int
i=10;
int
*p=&i;
printf("%d",*p);
}
指针指向i的内存单元。而不是将*p单独拿来用,这个相当于指存所指内存单元的值,而不是地址,所以,我们应将i的地址即&i给p.
"stdio.h"
void
main(
)
{
int
i=10;
int
*p;
p=&i;
printf("%d",*p);
}
应该是这样,将i的地址给p,相当于这样的程序
#include
"stdio.h"
void
main(
)
{
int
i=10;
int
*p=&i;
printf("%d",*p);
}
指针指向i的内存单元。而不是将*p单独拿来用,这个相当于指存所指内存单元的值,而不是地址,所以,我们应将i的地址即&i给p.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
指针类型中存的是一个内存地址,你拿指针比较大小,运行时候是不会去取指针所对应的地址里面存的内容的。而且*p=0这种赋值绝对会错。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询