c语言的指针
c语言的指针
指针可以简化一些C编程任务的执行,如动态内存分配,没有指针是无法执行的。
每个变量都有一个内存位置,每个内存位置都定义了可使用&运算符访问的地址,它表示了再内存找那个的一个地址。
实例:
#include <stdio.h>
int main()
{
int var_a = 10;
int *p; //定义了一个指针变量
p = &var_a;//将指针变量执行var_a的地址
printf("var_a 变量的地址为:%p\n",p);
return 0;
}
上面编译执行结果为:
var_a 变量的地址: 0x7ffeeaae08c8
什么是指针?
指针也就是内存地址,指针用来存放变量的内存地址。在使用指针存储其他变量或者常量地址时,必须先声明指针的类型,格式为:
type *var_name
type为C数据类型,var_name是指针的名字,用*来声明指针,与乘法的星号相同,如遇到优先级问题时,可以用小扩号,以下是有效的指针声明:
int *ip; /* 一个整型的指针 */
double *dp; /* 一个 double 型的指针 */
float *fp; /* 一个浮点型的指针 */
char *ch; /* 一个字符型的指针 */
所有的数据类型,不管整型、浮点型、字符型,还是其他的数据类型,对应指针的值的类型都是一样的,代码地址的长都是十六进制。不同的是,指针指向的变量还是常量的类型。
如何使用指针?
定义一个指针变量,把变量的地址赋值给指针,可访问指针中的地址与变量的值,指针可通过一元运算符*来返回操作数的指针地址的变量的值。
实例:
#include <stdio.h>
int main()
{
int var = 20;//声明一个变量
int *ip;//声明一个指针变量
ip = &var;//将变量的地址赋值给指针
printf("变量var的地址为:%p\n",&var);
/*在指针变量中获取地址*/
printf("变量var的地址为:%p\n",ip);
/*在指针变量中获取值*/
printf("变量var的地址为:%d\n",*ip);
return 0;
}
编译执行结果为:
var 变量的地址: 0x7ffeeef168d8
ip 变量存储的地址: 0x7ffeeef168d8
*ip 变量的值: 20
NULL指针
在声明变量的时候,如果没有确切的地址赋值,为指针变量赋一个NULL值是一个良好的习惯。
赋为NULL值的指针被称为空指针。
NULL指针是一个定义在标准库中的值为零的常量。
实例:
#include <stdio.h>
int main ()
{
int *ptr = NULL;
printf("ptr 的地址是 %p\n", ptr );
return 0;
}
在大多数的操作系统上,程序不允许访问地址为 0 的内存,因为该内存是操作系统保留的。然而,内存地址 0 有特别重要的意义,它表明该指针不指向一个可访问的内存位置。但按照惯例,如果指针包含空值(零值),则假定它不指向任何东西。
如需检查一个空指针,您可以使用 if 语句,如下所示:
if(ptr) /* 如果 p 非空,则完成 */
if(!ptr) /* 如果 p 为空,则完成
二级指针
二级指针指的是指针指向了一个一级指针,保存了一个一级指针的地址;也是使用*来指定,多少个星号表示是几级指针。
#include <stdio.h>
int main()
{
int var = 10;//定义一个变量
int *p = NULL;//定义一个一级指针
int **p2 = NULL;//定义一个二级指针
p = &var;
p2 = &p;
printf("变量var的地址:%p\n",&var);
printf("指针p的地址:%p\n",&p);
printf("指针p2的地址:%p\n",&p2);
printf("变量var的值:%d\n",var);
printf("指针p的值:%d\n",p);
printf("指针p2的值:%d\n",p2);
printf("变量var的值:%d\n",var);
printf("指针p的值:%d\n",*p);
printf("指针p2一级的值:%d\n",*p2);
printf("指针p2二级的值:%d\n",**p2);
return 0;
}
编译执行结果:
变量var的地址:000000000061FE1C
指针p的地址:000000000061FE10
指针p2的地址:000000000061FE08
变量var的值:10
指针p的值:6422044
指针p2的值:6422032
变量var的值:10
指针p的值:10
指针p2一级的值:6422044
指针p2二级的值:10
指针详解
在 C 中,有很多指针相关的概念,这些概念都很简单,但是都很重要。下面列出了 C 程序员必须清楚的一些与指针相关的重要概念:
| 概念 | 描述 |
|---|---|
| 指针的算术运算 | 可以对指针进行四种算术运算:++、--、+、- |
| 指针数组 | 可以定义用来存储指针的数组。 |
| 指向指针的指针 | C 允许指向指针的指针。 |
| 传递指针给函数 | 通过引用或地址传递参数,使传递的参数在调用函数中被改变。 |
| 从函数返回指针 | C 允许函数返回指针到局部变量、静态变量和动态内存分配。 |

浙公网安备 33010602011771号