您好,欢迎访问本站博客!登录后台查看权限
  • 转载文章需要注意是否有转载标识,未经允许谢绝转载
  • 发贴请联系站长提权

C语言指针---最容易理解的C语言指针入门文章

C/C++ adminX 2019-02-23 797 次浏览 0个评论
网站分享代码

C语言中的指针一直以来是大部分初学者的难点,事实上很多初学者将指针想的过于复杂了。

可以将指针换一个说法,将指针称为地址类型,因为指针类型本质就是储存一个内存地址。


指针的本质

首先我们来看一下指针类型的定义与赋值

数据类型* 变量名=变量地址;

例:

int a=5;    //假设a的地址为0x1005
int* p=&a;  //&可以获取变量地址,因此可以将a的地址赋值给p(因为指针是存储地址的类型,因此存储需要是变量的地址)

这时p就储存了a的内存地址,我们可以使用%p来打印出来。

printf("变量a的地址为%p\n",&a);
printf("指针p的值为%p\n",p);
printf("指针p的地址为%p\n",&p);//指针所在的地址

结果为

变量a的地址为0x1005
指针p的值为0x1005
指针p的地址为0x1007

可以看到指针p存储了变量的地址0x1005,而指针类型本身也是有地址的,可以看到指针p的地址为0x1007

指针.jpg

指针.jpg

由此我们可以知道,指针类型就是一种储存其他变量的内存地址的变量类型,与其他变量类型没有什么区别。


知道了指针类型的本质,下面讲一下指针类型的声明方法。

数据类型* 变量名=变量地址;

定义指针类型时,声明的类型就是指针类型指向的变量的类型。

int a=5;
double b=6;

int* p=&a;
double* p2=&b;

如果写作

int a=5;
double b=6;

double* p=&a;
int* p2=&b;

是会报错的。

在声明中*号可以写在类型后面,也可以写在变量名前面,为了便于理解,建议前期写在变量后面。


*操作符

我们可以使用*操作符来获取指针所指向的值,例如

int a=5;
int* p=&a;

printf("%d",*p);

结果为:

5

指针2.jpg

很多初学者会将*操作符与定义变量时使用的*弄混,个人建议可以将这两个看成两种符号,便于理解,这也是为什么建议定义指针时,将*号写在类型后面的原因。

我们可以通过给*p赋值来更改原变量的值,这也是指针的很重要的一个作用。


野指针

在初始化指针时,如果不想指向任何变量,我们需要为指针赋值NULL或0。

int* p=NULL;
int* p1=0;


因为指针在没有被初始化时,其值会指向一个随机地址,就变成了野指针。

int* p;//野指针,此时p的值是一个随机值,可能会指向一个不可用的地址。

野指针是一个很危险的操作,初始化指针时,如果不为其赋值,一定要将指针变为空指针,也就是为指针赋值NULL或0.

指针3.jpg


版权所有,转载需注明

已有 797 位网友参与,快来吐槽:

发表评论

分享:

支付宝

微信

站点统计