指针函数&内存分配 C

来源:互联网 发布:网络摄像机ip修改器 编辑:程序博客网 时间:2024/06/07 23:14


/**

 *整数转换成字符串

 *作者:xjp

 */

char*NumtoString(int num){

  int i=0,j=0;

  char temp[10],str[10];

  char *p=str;

  while(num){

     temp[i]=num%10+'0';

     num=num/10;

     i++;

  }

  temp[i]='\0';

  i=i-1;

  while(i>=0){

     str[j]=temp[i];

     j++;

     i--;

  }

  str[j]='\0';

  return p;

}

调试程序可以看到pstr地址都是0x28fea8,但是当调用此函数后指针指向的内存值(内存中的栈)会随时发生变化。

/**

 *整数转换成字符串

 *作者:xjp

 */

intmain(){

 

  int num = 1234;

  char *s = NumtoString(num);

  printf("s=%s ",s);

 

  return 0;

}

 

打印的结果不是1234

当调用这个指针函数NumtoString,不能得到预期的结果:原因是违背了函数的栈帧机制。分配内存有一句话叫做“一旦使用,它即改变”。

 

修改一个地方staticchar temp[10],str[10];

/**

 *整数转换成字符串

 *作者:xjp

 */

char*NumtoString(int num){

  int i=0,j=0;

  staticchar temp[10],str[10];//改为static

  char *p=str;

  while(num){

     temp[i]=num%10+'0';

     num=num/10;

     i++;

  }

  temp[i]='\0';

  i=i-1;

  while(i>=0){

     str[j]=temp[i];

     j++;

     i--;

  }

  str[j]='\0';

  return p;

}

调试程序可以看到pstr地址都是0x407020,这与0x28fea8不是一个存储块,0x407020是普通数据段(静态存储区)

问题:还可以怎样改动?

0 0
原创粉丝点击