您的位置:首页 > 其它

C提高(4):

2015-10-20 12:28 218 查看
铁律1:指针是一种数据类型

1)指针也是一种变量,占有内存空间,用来保存内存地址;

指针是一种变量:

void main()

{
char *p1=NULL;
printf("p1:%d\n",sizeof(p1));
system("pause");

}//结果就是:P1:4

void main()

{
char **p2=NULL;
printf("p2:%d\n",sizeof(p2));
system("pause");

}//结果就是:P2:4

引申:

//char *p1形参,形参也是被调用该函数的参数,只不过具有对外属性

void getData(char *p1)

{
printf("getData() begin\n");
return 0;

}

//char **p2形参,

void getData2(char **p2)

{
printf("getData2() begin\n");
return 0;

}

总结:以此而言,无论是增加了几个“*”,这些数据依然是变量;

2)*p操作内存

int c=0;
int a=10;
int *p3=NULL;
a=20;//直接通过变量来修改a的值
p3=&a;//
//*p3放在=号的左边,去修改内存空间的值;
*p3=30;//通过指针间接修改内存空间的值

c=*p3;//*p3放在等号的右边从内存空间中取值

总结:

      在指针声明时,*号表示所声明的变量为指针

在指针使用时,*号表示操作指针所指向的内存空间中的值。

*p相当于通过地址(P变量的值)找到一块内存,然后操作内存

*p放在等号的左边赋值(给内存赋值)

*p放在等号的右边取值(从内存获取值)

3)指针变量和它只想的内存块是两个不同的概念

引申:对于以下程序语句的理解

void senddata01(char *p1);

void senddata02(char  **p1);

void senddata03(char  ***p1);

void senddata04(char  *p[ ]);

void senddata05(char  (*p)[10]);

void senddata06(char  *****p4);

先站在C/C++编译器的角度去理解,无论变量前面有几个*号,只要有一个*号出现,那么,编译器就会把它作为指针来理解,并且根据数据类型为char,分配一个字节的内存。

指针的数据类型是什么?指针的数据类型是指它所指向的内存空间的数据类型。

引申:一些内存空间是不允许写入数值的

例如:char *p=0x77;

           *p=100;

运行时就会出现这样的错误:###.exe中0x00412728处有未经处理的异常:0x0000005:写入位置0x00000077时发生冲突
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: