C语言进阶:第26课、指针的本质分析

程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能访问这段存储空间?

*号的意义:

在指针声明时,*号表示所表明的变量为指针;
在指针使用时,*号表示 取指针所指向的内存空间中的值。
*号类似于一把钥匙,通过这把钥匙可以打开内存,读取内存中的值。
	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语言中一种特别的变量;

指针所保存的值是内存的地址;

可以通过指针修改内存中的任意地址内容。

猜你喜欢

转载自blog.csdn.net/qq_28388835/article/details/80389406