局部字符串指针 局部数组区别
来源:互联网 发布:sql注入分析 编辑:程序博客网 时间:2024/04/30 15:10
① 函数的返回类型不能为一个数组类型。
这个就是说,作为函数返回类型的不能为一个数组,我们要想返回一系列的值,只能用一个指针来代替了,返回指向这一系列值的第一个元素的指针。
② 局部数组,具有局部作用域,当函数调用结束之后,数组也就被操作系统销毁了,即回收了他的内存空间,它里面的东西随时都有可能被覆盖。虽然此时我们获得了指向这一块内存的指针,但此刻里面的东西很大可能都不是我们想要的了。
我们又该怎么解决这个问题呢?
1: 返回一个静态的数组
即我们在定义数组的时候吧数组定义成为静态的。
如:
char *fun()
{
static char a[] = "hello,world";
return a;
}
2: 动态分配内存
如:
char *fun()
{
char *a = (char*)malloc(sizeof(char)*100);
a = "hello,world";
return a;
}
3: 使用全局数组
全局数组具有全局的作用域。
字符串:
我们在函数或者全局内定义的char *p = “Hello World!”;编译器都会为我们作为全局变量定义。伪代码如下
const char temp[] = “Hello World!”;
char *p1 = temp;
任何调用“Hello World!”只是返回temp的一个const指针。
函数内:
Char * fun2()
{
char *p = “Hello world!”
return p;
}
全局变量
char *p = “Hello world!”
威盛的一道笔试题
silver6 | 02 十一月, 2005 09:20
#include <stdio.h>
char *returnStr()
{
char p[]="hello world!";
return p;
}
int main()
{
char *str;
str=returnStr();
printf("%sn",str);
}
问上述的输出是什么?
还有就是我把上述函数稍改一下
#include <stdio.h>
char *returnStr()
{
char *p="hello world!";
return p;
}
int main()
{
char *str;
str=returnStr();
printf("%sn",str);
}
这个输出又是什么?各是什么原因呢
char p[]="hello world!";
p指向一个局部的数组地址,分配在栈中。
char *p="hello world!";
p指向一个字面常量。字面常量分配在静态存储区。所以:
第一个指向的是个已被释放的内存,不会输出hello world!,要出错的吧
第二个输出的是: hello world!
- 局部字符串指针 局部数组区别
- 局部常量字符串指针及常量字符串数组 返回值
- 字符串指针和字符数组,静态全局、静态局部、全局和局部变量区别,字符串常量和字符串变量,程序的内存分配
- 局部数组
- 不要返回局部数组的指针!
- 函数可以返回局部的指针数组
- 局部变量和局部指针
- 返回局部变量指针
- 返回,局部,指针。
- 函数返回 局部指针
- 返回局部变量指针
- 返回局部变量指针
- 返回局部变量指针
- 返回局部指针变量
- 返回局部指针变量
- 返回局部指针变量
- 返回局部指针
- 返回局部指针变量
- MD5使用
- iOS架构的研究
- 基于Hadoop生态圈的数据仓库实践 —— 进阶技术(二)
- 在linu系统安装apache全过程(httpd、apr、apr-util、pcre)以及进行相应配置
- JAVA类属性和对象属性的初始化顺序
- 局部字符串指针 局部数组区别
- 测试
- github使用新手教程
- C++ STL set和multiset的使用
- jQuery 之 用折线图、饼图、柱状图、仪表盘 展现数据
- QS Network-ZOJ1586
- linux上ln命令详细说明
- 如何在魔镜中定位并获取一个物体信息
- 二叉树------二叉查找树的相关内容