😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍C语言指针和数组的关系🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
本文未经允许,不得转发!!!
目录
- 🎄一、指针和数组有什么关系
- 🎄二、指针和数组名
- 🎄三、指针和数组访问方式
- ✨3.1 以指针的形式访问
- ✨3.2 以下标的形式访问
- 🎄四
- 🎄五
- 🎄六、
🎄一、指针和数组有什么关系
指针和数组有什么关系呢?
C语言中,并没有明确规定指针和数组的关系,也就是说,指针和数组实际上并没有什么关系,只是它们的很多用法很相似,才令很多初学者感到困惑。
定义一个指针变量后,系统会分配一块内存(32位系统是4个字节,64位系统是8个字节)。然后不管这块内存在之后放了什么内容,编译器都会把他当成一个内存地址来处理。指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到。
数组的本质是一块连续内存区域,里面分成若干个相同大小的内存区域,这些小的内存块就是数组元素。数组的大小与元素的类型和个数有关。定义数组时必须指定其元素的类型和个数。数组可以存任何类型的数据,但不能存函数(但可以存函数指针)。
🎄二、指针和数组名
数组名就是让初学者混淆指针和数组的一个重要原因。
上篇文章 提到,数组的数组名其实可以看作一个指向数组首个元素的指针。既然是指针,我们就清楚它关于指针的4个方面内容:指针所在的地址、指针的值、指针的类型、指针所指向的类型。
- 数组名作为指针所在的地址:数组名本身的地址由编译器另外存储,存储在哪里,我们并不知道;
- 数组名作为指针的值:是数组首个元素的地址,可以通过
printf
打印出来,会等于&a[0]
; - 数组名作为指针的类型:
数组元素类型*
; - 数组名作为指针所指向的类型:数组元素类型。
下面看例子2.1,看看是怎样混淆的:
// array_name.c
#include <stdio.h>
int main()
{
int arr[5] = {1,2,3,4,5};
int *pa = arr; // pa指针指向 arr数组首个元素
printf("num1=%d num2=%d unm3=%d\n", *arr, *(arr+1), arr[2]);
printf("num1=%d num2=%d unm3=%d\n", *pa , *(pa+1) , pa[2]);
pa++;
//arr++; // 保存,数组名的值不能修改
}
pa指针指向 arr数组首个元素之后,下面使用了完全相同的用法,不去看定义的话,都分不清谁是指针,谁是数组。
那有哪些区别吗?数组名是常量指针,它不能作为左值使用,它的值无法被修改,所以不能使用arr++。
🎄三、指针和数组访问方式
✨3.1 以指针的形式访问
✨3.2 以下标的形式访问
🎄四
🎄五
🎄六、
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁