【C语言】12.指针与数组的关系

一、数组名的理解

#include <stdio.h>
int main()
{
	 int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	 printf("&arr[0] = %p\n", &arr[0]);
	 printf("arr = %p\n", arr);
	 return 0;
}

通过上述代码输出结果我们发现结果相同,因此我们得出结论:数组名就是数组首元素(第⼀个元素)的地址。
但是有两个例外:
• sizeof(数组名),sizeof中单独放数组名,这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节
• &数组名,这里的数组名表示整个数组,取出的是整个数组的地址(整个数组的地址和数组首元素的地址是有区别的)

二、使用指针访问数组

#include <stdio.h>
int main()
{
	 int arr[10] = {0};
	 //输⼊ 
	 int i = 0;
	 int sz = sizeof(arr)/sizeof(arr[0]);
	 //输⼊ 
	 int* p = arr;
	 for(i=0; i<sz; i++)
	 {
		 scanf("%d", p+i);
		 //scanf("%d", arr+i);//也可以这样写 
	 }
	 //输出 
	 for(i=0; i<sz; i++)
	 {
		 printf("%d ", *(p+i));
		 //printf("%d ",p[i]);
	 }

	 return 0;
}

三、 一维数组传参的本质

数组名是数组首元素的地址;那么在数组传参的时候,传递的是数组名,也就是说本质上数组传参本质上传递的是数组首元素的地址
⼀维数组传参,形参的部分可以写成数组的形式,也可以写成指针的形式。

四、二级指针

指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里?这就是⼆级指针
在这里插入图片描述

• *ppa 通过对ppa中的地址进行解引用,这样找到的是 pa , *ppa 其实访问的就是 pa
• **ppa 先通过 *ppa 找到 pa ,然后对 pa 进行解引用操作: *pa ,那找到的是 a

五、指针数组

指针数组就是存放指针的数组。数组的每个元素都是指针变量
在这里插入图片描述

六、指针数组模拟二维数组

#include <stdio.h>
int main()
{
	 int arr1[] = {1,2,3,4,5};
	 int arr2[] = {2,3,4,5,6};
	 int arr3[] = {3,4,5,6,7};
	 //数组名是数组⾸元素的地址,类型是int*的,就可以存放在parr数组中 
	 int* parr[3] = {arr1, arr2, arr3};
	 int i = 0;
	 int j = 0;
	 for(i=0; i<3; i++)
	 {
		 for(j=0; j<5; j++)
		 {
			 printf("%d ", parr[i][j]);
		 }
			 printf("\n");
	 }
	 return 0;
}

在这里插入图片描述
parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,parr[i][j]就是整型⼀维数组中的元素。
上述的代码模拟出二维数组的效果,实际上并非完全是二维数组,因为每一行并非是连续的。

相关推荐

  1. C语言指针关系

    2024-06-14 00:12:05       29 阅读
  2. C语言指针区别

    2024-06-14 00:12:05       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-14 00:12:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-14 00:12:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-14 00:12:05       87 阅读
  4. Python语言-面向对象

    2024-06-14 00:12:05       96 阅读

热门阅读

  1. QT QByteArray 的用法

    2024-06-14 00:12:05       34 阅读
  2. Dijkstra算法的原理

    2024-06-14 00:12:05       34 阅读
  3. CompletableFuture 异常捕获方式

    2024-06-14 00:12:05       37 阅读
  4. react路由的使用

    2024-06-14 00:12:05       33 阅读
  5. 【BeX5】知识中心

    2024-06-14 00:12:05       36 阅读
  6. PDF格式分析(八十六)——修订注释(Redaction)

    2024-06-14 00:12:05       38 阅读
  7. 【Linux之·软件更新源】

    2024-06-14 00:12:05       31 阅读
  8. 49. 简单数字加密

    2024-06-14 00:12:05       30 阅读
  9. Python实战:分析产品价格波动的数据探索

    2024-06-14 00:12:05       36 阅读
  10. 动态规划法学习

    2024-06-14 00:12:05       33 阅读
  11. python 循环导入(circular imports)解决方法

    2024-06-14 00:12:05       40 阅读
  12. spring

    spring

    2024-06-14 00:12:05      28 阅读
  13. ZC2205-24V500mAUltralow-Quiescent-Current LDO

    2024-06-14 00:12:05       34 阅读
  14. 613作业

    613作业

    2024-06-14 00:12:05      36 阅读