设为首页 加入收藏

TOP

C++指针之(易错模型)
2015-07-16 12:55:03 来源: 作者: 【 】 浏览:3
Tags:指针 易错 模型

规则一:Main(主调函数)分配的内存(在堆区,栈区、全局区)都可以在被调用函数里使用。如果在被调用函数里面的临时区(栈)分配内存,主调用函数是不能使用的。


#include "stdio.h"
#include "stdlib.h"
#include "string.h"


char * getstring1()
{
? ? char *p1 = "abcde";
? ? return p1;
}


char * getstring2()
{
? ? char *p2 = "abcde";
? ? return p2;
}


char * getstring3()
{
? ? char buf[30];
? ? strcpy(buf, "abcde");
? ? return buf;
}


void main()
{
? ? int i= 0;


? ? //指针指向谁就把谁的地址赋给指针变量。
? ? char *p1 = getstring1();
? ? char *p2 = getstring2();
? ? char *******? ? p3 = NULL; //p3 是个变量
? ? char *p4 = getstring3();


//? ? printf("p1:%s\n", p1);
//? ? printf("p2:%s\n", p2);
//
//? ? printf("p1:%d\n", p1);
//? ? printf("p2:%d\n", p2);


? ? printf("p4:%s\n", p4);



? ? //指针变量和它所执行的内存空间变量是两个不同的概念
? ? strcmp(p1, p2);


? ? system("pause");
}


?


规则二:间接赋值,注意内存冲突。


?


#include "stdio.h"
#include "string.h"
#include "stdlib.h"
//看见一级指针,要去分辨指针的输入输出特性
//指针的输入特性:在主调函数里面分配内存,在被调用函数里面使用
//指针的输出特性:在被调用函数里面分配内存,主要是把运算结果甩出来
int getLen3(int *p /*in out*/)
{
? ? //*(NULL) = 40;
? ? //*(0)? = 40;
? ? *p = 40; //间接赋值 如果p是a的地址,那么就间接的修改a的值? ? ? ? ? //*p形参,去间接的修改实参的值
}
void main()
{
? ? int? ? a = 10; //定义了一个变量(实参)//a看成0级指针
? ? int *? ? p = NULL; ////定义了一个变量(形参)//1级指针
? ? a = 20; //直接修改a的值
? ? printf("a:%d \n", a);
? ? //p = &a; //a的地址赋给p //把一个变量去地址传给另外一个变量 //实参取地址传给形参
? ? getLen3(p);
? ? getLen3(NULL);? ?
? ? printf("a:%d \n", a);
? ? system("pause");
}? ?



//*(NULL) = 40;
//*(0)? = 40;
getLen3(NULL);


不同的编译器会有不同的提示。地址为为零的内存空间归系统所以,程序修改里面的内容,会出错。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇深入理解Spring Redis的使用 下一篇C++二级指针第三种内存模型

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: