1.指针的声明与赋值
可以认为指针是一种特殊的数据类型,会根据声明时的数据类型来分配,指针分配的大小是固定的,一般32位机上都是4个字节,也就是指针存储地址的空间总大小为4个字节,这个在不同平台上可能不同
声明的格式 void* p;
·声明一个指针后,系统会分配一个地址
·赋值是赋值地址,为计算机保存数据的地址而不是实体的值,而是对应存储数据空间的地址
声明不赋值:
char* c;
int * i;
声明并赋值:
char a[10];
char* c = &a; //将计算机上a存储的地址,保存到c指针在计算机内存的地址位置
区别指针的赋值与值得的复制
char *a,*b;//声明两个指针变量
b=a;//指针b指向指针a,也就是指针b的地址内存中存了a的地址(指针地址值运算)
*b = *a;//将地址a对应的值赋值给地址a对应的值(指针地址所对应的值运算)
空指针不能赋值:
char* p;
*p == 'a'; //这样是非法的,这是为什么呢,是因为指针p还没有初始化,前面p是被声明了,赋予了指针p本身的内存空间,也就是地址,但是该片空间还没有值,也就是没有所指向的值
指针的指针的理解:
1.函数传值和传址
·传值:可以理解为元参数的一份拷贝,元参数不受影响
void change(int var_t)
{
var_t=1;
return;
}
void fun()
{
int var1= 0;
change(var1);
printf(" var1= %d /n");
return ;
}
·传址:传递元参数的地址
void change(int *var_t) //var_t = &var1 为var1在内存上的地址,通过* 来获取var1的值
{
*var_t=1; //去参考,给这个地址位置赋值
return;
}
void fun()
{
int var1= 0;
change(&var1);
printf(" var1= %d /n");
return ;
}
·指针的指针
void Malloc(char* *hw_t) // 这里我们分为两部分:(char*) (*hw_t) 我们从右边开始,hw_t = &hw,我们知道指针中存的就是一个指针指向的地址,所以 *&hw = *hw_t,也就是取指针的值,因为指针的值依然是一个指针,所以就是(char*)
{
*hw_t = (char*) malloc(100);
}
void main()
{
char* hw; //定义一个指针,但是指针为空,没有保存可以内存地址
Malloc_hw(&hw); //传递hw指针自身的地址
}
以上还是个人理解,仅供参考,如有误,请勿模仿