C 语言 理解 指针 和 数组 及 数组指针和指针数组

本文深入探讨了数组和指针的基本概念及应用,包括一维和二维数组的内存布局,指针的定义与使用,二级指针的概念,以及数组指针和指针数组的区别。通过实例代码展示了如何在C语言中操作这些数据结构。

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

数组

数组是一组相同类型元素的集合。
注:数组创建, [] 中要给一个常量才可以,不能使用变量。

可以通过 下标引用操作符 " [ ] "来查看相应下标的数组元素
数组的大小可以通过计算得到

一维数组


#include<stdio.h>
#include<stdlib.h>

int main()
{
	int arr[] = { 1, 2, 3, 4, 5 };
	int length = sizeof(arr) / sizeof(arr[0]);

	for (int i = 0; i < length; i++)
	{
		printf("arr[%d] = %p\n", i, &arr[i]);
	}

	system("pause");
	return 0;
}

在这里插入图片描述
一维数组在内存中是连续存放的

二维数组

int main()
{
	int arr[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
		}
	}

	system("pause");
	return 0;
}

在这里插入图片描述
二维数组在内存中也是连续存放的

指针

在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在 电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因 此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。

指针就是变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)。
指针是用来存放地址的,地址是唯一标示一块地址空间的。
指针的大小在32位平台是4个字节,在64位平台是8个字节。

指针的类型决定了它可以访问的字节数。(根据不同的数据类型所占字节数的大小决定)

二级指针
代表的是指针的地址

#include<stdio.h>
#include<stdlib.h>


int main()
{
	char a = 'a';
	char *p = &a;
	char **p1 = &p;

	printf("%c\n", a);
	printf("%c\n", *p);
	printf("%c\n", **p1);

	system("pause");
	return 0;
}

在这里插入图片描述

数组指针

数组指针 就是指针 这个指针能够指向数组
一般用于二维数组的使用

int main()
{
	char arr[3][10] = { "hello", "world", "!!!" };

	char (*arr1)[10] = &arr;
	
	for (int i = 0; i < 3; i++)
	{
		printf("%s ", *(arr1+i));
	}

	system("pause");
	return 0;
}

指针数组

指针数组 是数组 这个数组内的元素是指针类型的

#include<stdio.h>
#include<stdlib.h>


int main()
{

	char *arr[10] = { "hello", "world", "!!!" };

	for (int i = 0; i < 3; i++)
	{
		printf("%s ", *(arr+i));
	}
	printf("\n");
	for (int i = 0; i < 3; i++)
	{
		printf("%s ", arr[i]);
	}

	system("pause");
	return 0;
}

在这里插入图片描述

函数指针数组

以函数为指针的数组
函数也有地址,将函数的地址存入数组中就是函数指针数组

int (*funcation[5])(int x, int y);
//其中 funcation[5] 为一个数组  数组的内容是int (*)() 类型的函数指 针。(int x, int y) 为参数  int 为返回值类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值