linux c 整形指针赋值,c传指针参数赋值方式

1、malloc函数:向系统申请分配指定size个字节的内存空间,分配成功后得到的是一个内存块,即连续的空间

2、malloc分配不一定成功,所以最好验证一下:

char *mallo;

if ((mallo=(char *)malloc(36*sizeof(char)))==NULL)

printf(“error in mallo!\n”);

3、传指针参数的原理在谭浩强书上已经讲过,这里只是做传指针后实际的赋值方式探讨

传递过来的参数:char *mallo

3.1:mallo=“bag”;/*直接=不成功,调用后mallo只能在这个函数中打印出,调用这个函数的函数却不能在调用后得到相应的赋值结果*/

3.2:for(;i<36;i++)

{

*(mallo++)='a'+rand()%26;

//mallo[i]='a'+rand()%26;/*这句和上句的效果相同*/

}/*for循环可以成功:依次赋值随进字母*/

3.3:char *test=mallo;

for(;i<36;i++)

{

*(test++)='a'+rand()%26;

//test[i]='a'+rand()%26;

}/*效果和3.2基本相同,只是让思路更清晰的一种做法*/

3.4:strcpy(mallo,“bag”);/*strcpy可以成功:strcpy会把“bag”中的三个字符和‘\0’一个一个的拷贝到mallo中,和上面的for循环类似*/

一开始在Linux下这种方式并没成功,在windows下添加#includes后成功了(windows下没有这个include会报错),再回到Linux下也能赋值成功,估计可能是没有#includes的缘故,但

奇怪的是,我再去掉#includes,还是成功,原因便无从知晓了。

4、源码

#include

#include

#include

#include

/*接受传过来的指针,并通过几种方式赋值*/

void memtest(char *mallo)

{

int i=0;

//char *test=mallo;

printf(“===============================================================”);

//printf(“\n*mallo:%s\n”,*mallo);

printf(“\nmallo: %s\n”,mallo);

/*for(;i<36;i++)

{

*(mallo++)='a'+rand()%26;

mallo[i]='a'+rand()%26;

}*//*for循环可以成功*/

strcpy(mallo,“bag”);/*strcpy可以成功*/

//mallo=“bag”;/*直接=不成功*/

//printf(“test:%s\n”,test);

printf(“\n\”bug\“ ->mallo: %s\n”,mallo);

}

void main()

{

char *mallo;

if ((mallo=(char *)malloc(36*sizeof(char)))==NULL)/*申请空间*/

printf(“error in mallo!\n”);

//memset(mallo,1,sizeof(mallo));

//mallo=“shanghaimizhuan”;

printf(“mallo_main: %s\n”,mallo);/*打印申请空间内容,在windows下为乱码,而Linux下不显示*/

/*以下打印数据在Linux和windows下数据不同,在赋值成功前windows已经会检测上面分配的空间大小,Linux则不会:strlen(mallo)可以看出*/

printf(“sizeof(mallo):%d--分割线--sizeof(*mallo):%d--分割线--strlen(mallo):%d\n”,sizeof(mallo),sizeof(*mallo),strlen(mallo));

memtest(mallo);/*调用赋值函数*/

printf(“===============================================================”);

printf(“\nmallo_aftersetparam:%s\n”,mallo);/*tbw调用后输出*/

printf(“sizeof(mallo):%d--分割线--sizeof(*mallo):%d--分割线--strlen(mallo):%d\n”,sizeof(mallo),sizeof(*mallo),strlen(mallo));

free(mallo);

}

posted on 2012-09-16 14:10 tbwshc 阅读(1391) 评论(1)  编辑 收藏 引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值