铁律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:应用指针必须和函数调用相结合(指针做函数参数)