C提高(4):

铁律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时发生冲突


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫与橙子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值