1.3 指针铁律

来源:互联网 发布:淘宝ipad版清除缓存 编辑:程序博客网 时间:2024/06/09 23:36


铁律1:指针是一种数据类型

指针也是一种变量,占有内存空间,用来保存内存地址
测试指针变量占有内存空间大小

2)*p操作内存
在指针声明时,*号表示所声明的变量为指针
在指针使用时,*号表示 操作 指针所指向的内存空间中的值
*p相当于通过地址(p变量的值)找到一块内存;然后操作内存
*p放在等号的左边赋值(给内存赋值)
*p放在等号的右边取值(从内存获取值)

3)指针变量和它指向的内存块是两个不同的概念
//含义1 给p赋值p=0x1111; 只会改变指针变量值,不会改变所指的内容;p = p +1; //p++
//含义2 给*p赋值*p=’a’; 不会改变指针变量的值,只会改变所指的内存块的值

//含义3 =左边*p 表示 给内存赋值, =右边*p 表示取值 含义不同切结!

//含义4 =左边char *p
//含义5 保证所指的内存块能修改

4)指针是一种数据类型,是指它指向的内存空间的数据类型
含义1:指针步长(p++),根据所致内存空间的数据类型来确定
p++=è(unsigned char )p+sizeof(a);
结论:指针的步长,根据所指内存空间类型来定。

以下都是错误的:char *p = NULL;*P =100;  //p指向非法地址char *p = 0X777;*p = 200;  //你不能确定内存上0X777这个位置是否能用char *p = "abcde";*p = 'z';


为啥?
因为这些地址都是无法访问的,无法读写;
字符串常量是常量,无法改动。。。。

铁律2:
(1)主调函数,被调函数

a:主调函数可把堆区,栈区,全局区数据的内存地址传给被调函数
b : 被调用函数只能返回堆区,全局区数据

(2)内存分配方式
a :指针作函数参数,是有输入和输出特性的

铁律3:应用指针必须和函数调用相结合(指针作函数参数)


铁律4:应用指针必须和函数调用相结合(指针做函数参数)

0 0
原创粉丝点击