指针和指针变量

一、定义和区别

1.指针的定义

指针是C语言中一种特殊的变量,它存储的是另一个变量的内存地址(可用'&'取地址符来获取,详见下)。指针变量的主要用途是提供一种间接访问内存的方式。通过指针,程序可以动态地访问和修改存储在内存中的值。

2.指针变量的定义

指针变量是用于存储地址的变量。它定义了一种数据类型,该数据类型可以指向另一种数据类型的内存地址。例如,int *p; 定义了一个指向整型数据的指针变量p

3. 区别

指针:是C语言中的一种数据类型,它本身不存储数据,而是存储数据的内存地址。
指针变量:是指针的具体实例,它是一个变量,可以存储一个地址,并且可以通过这个地址来访问或修改内存中的数据。
举一个例子:

int *p; // 声明了一个指向整型数据的指针,即整型指针

那么 p 就是指针变量,其值(存储的地址值可变)

二、声明和初始化

1.指针的声明

声明指针时,需要指定它所指向的数据类型。这告诉编译器指针应该访问哪种类型的数据。例如:

int *p; // 声明一个指向整型数据的指针
char *c; // 声明一个指向字符数据的指针
float *f; // 声明一个指向浮点型数据的指针

2.指针的初始化

指针变量需要被初始化,即赋予一个内存地址,才能使用。通常,这是通过将变量的地址赋给指针来完成的:

int var = 10;
int *p = &var; // p现在指向var的内存地址

三、'*' 操作符的两种名称(使用方法)

1.指针声明操作符:

*用于变量声明时,它表示该变量是一个指针类型。这个操作符放在变量名之前,用来指定变量可以存储其他变量的内存地址。例如,在 int *p; 中,* 表示 p是一个指针变量,它可以存储整型数据的地址

2.解引用操作符:

* 操作符用于指针变量前面时,它表示对指针指向的内存地址上的数据进行访问或读取。这种操作称为解引用。例如,如果p是一个指针,*p 就是获取p所指向地址上存储的数据。

四、指针的类型

指针的类型非常重要,因为它决定了指针可以访问的内存大小和对齐要求。例如,int *只能用于访问整型数据,char *用于访问字符型数据。
int *p; // 声明一个指向整型数据的指针

五、空指针

空指针是一个不指向任何地址的指针。在C语言中,NULL宏定义用来表示空指针:

int *p = NULL; // p是一个空指针

☆避免访问未初始化的指针!!!

什么是未初始化的指针呢?指针是用来存储另一变量的内存地址信息的。如果在指针定义之后为令其指向另一变量的内存。 那他就被称为未初始化的指针。
因此建议每次在定义完指针之后,就将其初始化为空指针。

int *p = NULL; // p是一个空指针

以下代码是访问未初始化指针的错误示范:

#include <stdio.h>
int main()
{
	int *a;
	*a = 123;
	return 0;
}

六、指针变量的大小

根据所使用编译器的不同,指针变量所占内存的大小也不同, 32位编译器。指针变量大小为四个字节。 64位编译器指针变量大小为八个字节。
以下以我所使用的32位编译器为例:

1	#include <stdio.h>
2	
3	int main() {
4	    char a = 'F';
5	    int f = 123;
6	
7	    char *pa = &a;
8	    int *pb = &f;
9	
10	    printf("a = %c\n", *pa);
11	    printf("f = %d\n", *pb);
12	
13	    *pa = 'C';
14	    *pb += 1;
15	    
16	    printf("now,a = %c\n",*pa);
17	    printf("now,f = %d\n",*pb);
18	    
19	    //地址都是四个字节,与其指向的类型无关
20	    printf("sizeof pa = %d\n",sizeof(pa));
21	    printf("sizeof pb = %d\n",sizeof(pb));
22	    
23	    //输出变量地址,使用%p正确输出
24	    printf("the addr of a is: %p\n",&a);
25	    printf("the addr of a is: %p\n",pa);
26	    printf("the addr of f is: %p\n",&f);
27	    printf("the addr of f is: %p\n",pb);
28	        
29	    return 0;
30	}

运行结果:
在这里插入图片描述

可视化执行(代码可视化网站):
在这里插入图片描述

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值