程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能访问这段存储空间?
*号的意义:
在指针声明时,*号表示所表明的变量为指针;在指针使用时,*号表示 取指针所指向的内存空间中的值。
*号类似于一把钥匙,通过这把钥匙可以打开内存,读取内存中的值。
int i=0; int j=0;
int* p=&i; //指针声明
j=*p; //取值
划重点:变量p保存着变量i的内存地址,即 p <---> &i, *p <---> i
32位系统中,指针为4个字节大小。
传值调用与传址调用:
指针是变量,因此可以声明指针参数;
当一个函数体内部需要改变实参的值,则需要使用指针参数;
函数调用时实参值将复制到形参;
指针适用于复杂数据类型作为参数的函数中。
对于const和指针的交叉考察,只需关注const修饰的是什么就行:
修饰的是指针,那么指针是不能改变的(p3);
修饰的是数据,那么指针指向的数据是不能改变的(p1、p2)。
int main()
{
int i=0;
const int* p1 = &i;
int const* p2 = &i; //注意此处const依然修饰的是int* p2,即这个数据是不能被改变的。
int* const p3 = &i;
const int* const p4 = &i;
*p1 = 1; //error
p1 = NULL; //ok
*p2 = 2; //error
p2 = NULL; //ok
*p3 = 3; //ok
p3 = NULL; //error
*p4 = 4; //error
p4 = NULL; //error
return 0;
}
小结:
指针是C语言中一种特别的变量;
指针所保存的值是内存的地址;
可以通过指针修改内存中的任意地址内容。