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 允许函数返回指针到局部变量、静态变量和动态内存分配。
posted @ 2025-04-26 21:15  站着说话不腰疼  阅读(28)  评论(0)    收藏  举报