您的位置:首页 > 其它

教你认识指针(一)

2014-01-11 00:30 176 查看
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <stdio.h>
//间接赋值
//通过形参改变实参
int demo02(int *p/*out*/)
{
int rv=0;
*p=1000;
return rv;
}

int demo01()
{
int rv=0;
int iNum=0;
int *p=NULL;
iNum=1;
p=&iNum;
*p=100;//通过*形参 == 间接地改变实参的值
printf("inum--->%d\n",iNum);
demo02_gaozhijiao(p);
//调用函数间接赋值函数调用时,形参传给实参,用实参取地址,传给形参,在被调用函数里面用*p,来改变实参,把运算结果传出来。
//指针作为函数参数的精髓。
printf("inum--->%d\n",iNum);
return rv;
}
//二级指针的应用
int demo04(char **p/*out*/)//通过二级指针去改变一级指针
{
int rv=0;
*p=(char *)0x500;//
return rv;
}

int demo03()
{
int rv=0;

char * p=NULL;
char ** p2=NULL;
p=(char *)0x100;
printf("inum--->%d\n",p);//输出的是他的地址
//printf("inum--->%d\n",*p);//里面没有内容啊。。。
p2=&p;
*p2=(char *)0x200;

printf("inum--->%d\n",p);

demo04_gaozhijiao(&p);
printf("inum--->%d\n",p);

return rv;
}

int main ()
{
char *p1=NULL;
char **p2=NULL;
char ***p3=NULL;
char ****p4=NULL;

//demo01();
demo03();
demo01();

//stack上分配4个字节的内存空间,
/*
1、多少级指针对于编译器有意义吗?
我们所说的多少级指针的依据是什么?
理解指针的概念,不在于机械的char**p++这样的概念。
而在于指针所指向的内存空间模型是几维的,就是对内存空间如何进行解释

我们应该按照内存分配的概念去理解
struct Teacher
{
int *p1=NULL;//
int **p2=NULL;//malloc两次
};

2、三级指针用在,malloc不知道所要打包的数据有多大的时候,或者函数二返回的数据给函数一使用的时候。为了防止在stack上定义的被清空,无法返回出去的时候 ,其他的时候禁止使用malloc。

3、指针的数据类型跟指针没关系,只是告诉操作系统如何去解释指针所指向的内存空间。

4、 char***p3=null;
char**p2=null;
p3=&p2;//
*p3=0x1100;//这时候p2这个指针变量改变了。

5、看指针是做输入还是输出?什么是输入什么是输出呢?
先说什么是输入,一般情况下在主调函数里面分配内存,被调用函数使用,一般称为输入。
如果在被调用函数里面分配内存,供主调用函数使用,则成为输出。

6、作业如上:各级指针的做函数参数的推演过程以及典型错误
*/

system("pause");
return 0;
}

/*
1、除了做底层应用,其他的慎用malloc,因为不free会发生内存泄露,而且要是紧跟break或者return 就free不了了
2、int*p=null只要申请一个四字节的内存空间,
3、程序运行内存分析的能力。训练接口的封装和设计能力
4、函数内变量的内存运行分布
5、数据类型是解释内存空间的
6、指针也是一种数据类型,指针的数据类型是指所指内存空间的数据类型。
int func(char);//按8字节去处理内存空间的数据
int func(char *a);//按字符串去处理
7、指针变量和他所指向的内存块是不同的概念。
8、野指针?*p=null只是定义了指针变量,没有分配空间
9、间接赋值是指针存在的最大意义。
10、改变变量有两种方法直接和间接赋值。
int demo04_gaozhijiao(char **p/*out*/)//间接,通过二级指针去改变一级指针
{
int rv=0;
*p=(char *)0x500;//直接
return rv;
}
int demo02_gaozhijiao(int *p/*out*/)
{
int rv=0;
*p=1000;//间接
return rv;
}
11、间接赋值存在的意义是什么?
1、*p++=*s++//等号左边表示改变地址,就是指向的内容,等号右边表示取里面的内容。
2\指针做函数参数的时候,可以作为输入,也可以作为输出,是输入还是输出,主要是看在主调函数中分配内存(输入)还是在被调函数中分配内存(输出)。
12、给指针p赋值p=p+1只会改变指针变量的值,不会改变所指向的内容,想改变内容用间接赋值!!int *p=&a;
13、给×p赋值只会改变所指向的内容的值,不会改变指针变量的值,
*p=200;不会改变p的值。

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: