指针函数&内存分配 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;
}
调试程序可以看到p与str地址都是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;
}
调试程序可以看到p与str地址都是0x407020,这与0x28fea8不是一个存储块,0x407020是普通数据段(静态存储区)
问题:还可以怎样改动?
- 指针函数&内存分配 C
- C语言-函数指针+动态内存分配
- C指针内存分配
- (三)C语言基础(数组,内存分配,函数指针)
- C语言有关内存分配函数、内存操作函数和函数指针的总结
- C语言编程基础-16动态内存分配 二级指针做形参 函数指针
- 指针数组&数组指针的分配内存及函数参数 C语言版
- c的内存分配函数
- C语言内存分配函数
- c语言函数内存分配
- c语言内存分配函数
- C语言内存分配函数
- C语言内存分配函数
- C 语言内存分配函数
- c语言的函数内存分配及指针函数的用法
- 类函数指针 分配内存 new()
- 字符串,指针,内存分配,函数调用
- 王学岗函数指针+动态内存分配
- HDU 2051 Bitset
- Cocos2dx 3.1.1 之 plist制作动画
- HDU 4901(杭电多校训练#3 1005题)The Romantic Hero(DP)
- POJ 3211 Washing Clothes
- HDU 2520 我是菜鸟,我怕谁
- 指针函数&内存分配 C
- ZOJ 3195 Design the city
- Mina 源码学习 -- 总纲
- opencv学习笔记(三)
- 不同VLAN之间相互通信的两种方式
- IPC
- Java中的栈
- 在Ubuntu上下载、编译和安装Android最新源代码
- 学习笔记_JFrame的一些使用(1)