初学指针*

本文详细介绍了指针的基本概念,包括指针的理解、创建、解引用、大小、类型意义、运算规则,以及特殊类型的指针如数组指针、字符指针和函数指针。通过实例展示了指针在编程中的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1,指针的理解

2,指针变量的创建

3,指针的解引用

4,指针的大小

5,指针变量类型的意义

 


1,指针的理解

指针可以理解为地址,我们在编译器上创建的所有变量都会被计算机分配地址,只是我们将这个地址称为指针。通过指针我们可以查找和修改这些变量。

“ & ” 是取地址符号,它是运算符,它的作用就是取一个变量的指针。

int a = 0;

此时a会被分配一个整形指针,&a取就是它的指针。

(当然也可以说变量a被分配到一块空间上,&a就是它所在空间的起始地址

2,指针变量的创建

指针变量也是一种变量,它的创建和其它形如整型变量,字符变量,数组变量的创建一样,都由变量类型和变量名称组成,也需要初始化,不要把它看作特殊的存在

比如,现在有一个整形指针变量pa,注意这里我们必须要对它进行初始化,要不然pa就是一个野指针(就是说它的指向是未知的,如果不加以限制的对它进行操作就会引发程序错误),所以可以初始化一个NULL,代表这个指针的指向是空的。操作如下:

int* pa = NULL;

int a = 0;

pa = &a;

这里我们就成功的创建了一个整形指针变量,还将一个整形的指针赋值给了它。

“ * ” 代表pa是一个指针变量,int 代表pa这个指针变量的类型为整形指针,所以pa是一个整形指针变量。下面写一个字符指针变量:

char c = 'a';

char* pc = &c;

注意:这里有一个小细节,在创建指针变量的时候,*其实是和变量待在一起的,就比如说整形变量的创建可以这样写:

int a = 0,b = 0;

那么整形指针变量呢?

它应该这样写:

int* a = NULL,*b = NULL;

所以创建多个变量的时候一定要注意对 “ * ” 的理解,尤其是在创建结构体变量的时候。

3,指针的解引用

介绍完指针的创建后,我们应该如何运用指针呢?通过解引用操作,我们可以修改指针所指向的内容。比如:

int a = 0;

int* p = &a;

对指针变量进行解引用:

p为指针变量,当我们要通过指针对变量进行修改时,解引用:

*p = 1;

此时变量a的内容由0改为了1,这就是对指针变量的解引用。

4,指针的大小

指针的大小取决于操作系统,如果是32位操作系统,那么指针的大小为4个字节,64位系统,则是8个字节大小。

32位:4字节

64位:8字节

说到这里便有一些疑惑,我们之所以将指针进行区分,说明不同的指针类型应该有所区别才对,那么现在所有指针的大小都相同,那么指针变量的类型究竟有什么意义呢?

5,指针变量类型的意义

指针变量的类型肯定是有很重要的意义的,按照一般思维,我们会认为指针变量的大小应取决于其类型,因为int类型的变量总是占4个字节,char类型的变量总是占1个字节,这是我们所知道的。但其实在某种程度上,也可以说指针变大小与其类型有关。

指针的大小的确是固定的,但在对指针进行操作时,是按指针变量类型的大小来进行操作的:

int a = 1000;

char* p1 = (char*)&a;

*p1=0;

printf("%d\n", a );

程序输出后的结果不是1000,而是768,这是因为在内存中,a原本占4个字节,原本最低为字节为 e8,用char*的类型取地址后进行解引用,此时再对*p1进行修改时是按char类型的大小来的,因此只把e8这一个字节的数字修改为0:

修改前:                                                    修改后:

(注意:这里显示的是1000以16进制 “ 3e8 ” 存储在0x0115f778上,且是小端存储,按照单个字节从左到右读,再整体上从右到左读,即读出 “ 00000300 ”,16进制 “ 300 ” 转10进制即为 768 )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值