指针和数组的关系

文章探讨了C语言中指针和数组的关系,尽管它们在访问同一块内存空间时方式相似,但实际上是两个不同的概念。指针和数组在内存中的存储位置和可修改性不同,数组在作为参数传递时会降维为指针。文章强调了两者共通的访问方式简化了编程,但也指出这种设计可能增加错误的可能性。作者还推荐了一个链接以了解更多关于两者的区别。

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

       前面通过对指针和数组的介绍,或多或少各位看官会认为其有所关系。但事实上,两者并无关系,以下我将从一个角度去表示我的看法。

1.为什么C语言中要存在两者

在解释之前,先看一段代码(然后我将分别以指针和数组的形式访问):

char* str="hello bit";//str指针变量在栈上保存,而abcdef在字符常量区,不可被修改
char buffer[]="hello world";//整个数组都在栈上保存,这部分可以被修改

 (对于用指针指向的字符串内容,其内容放在字符串常量区中,虽然指针在栈上开辟,但当退出main函数后,指针所用的栈空间被释放后,其字符串因为在字符串常量区,所以不可被用户修改。但对于数组存储的字符串内容,是全部存储到栈上开辟的空间中,这块空间属于用户空间,可被修改)只是解释下,并无不影响主要内容。

<1>以指针的形式访问指针和以下标的形式访问指针

int len = strlen(str);
	for (int i = 0; i < len; i++)
	{
		printf(" % c\t", *(str + i));
		printf("%c\n", str[i]);
	}
	printf("\n");

<2>以数组的形式访问

int len = strlen(arr);
	for (int i = 0; i < len; i++)
	{
		printf(" % c\t", *(arr + i));
		printf("%c\n", arr[i]);
	}
	printf("\n");
	system("pause");

结果我们会发现即使访问的方式不同,但打印出来的内容"abcdef"却相同,所以通过这个测试,我们可以得到指针和数组在在指向或者表示一块空间时,访问方式是相通的。但是C语言为什么要存在这两者呢?通过前面数组的介绍,我们知道数组传参是要发生降维成为指针的现象(数组arr在main函数中为数组,但在传入函数后,其arr就变成数组首元素的指针变量)。我么假设只以数组只能【】访问,指针只能通过*解引用访问,看一段代码

void InitArr(int arr[], int n)
	{
		for (int i = 0; i < n; i++)
		{
			*(arr + i) = i;//以指针的形式去访问
		}
}
    
	int main()
	{
		int arr[10];
		int n = 9;
		InitArr(arr, n);
		for (int i = 0; i < 10; i++)
		{
			printf("%d\n", arr[i]);//以数组的形式去访问
		}
		system("pause");
		return 0;
	}

其实并无太大问题,但是我们难免会发现在C中(面向过程)对于程序猿是极不友好的,因为这样的编写会需要程序员不断在指针和数组之间反复切换思维,结果可能会增大程序写错的概率。打通指针和数组的山洞,就好像将不同的语法在使用上越统一,那么就越节省人力。

结论:指针和数组在指向或者表示一块空间的时候,访问方式时可以互通的,具有相似性。到并不代表两者是同一东西。

      以上就是为什么C语言为什么要存在这两者,至于指针和数组的区别,我就不重复发明轮子了,推上链接http://t.csdn.cn/uVUh4,这位chrry大佬总结的十分明白。还有一个函数指针我会最近尽快补完博客,并在指针一文中完善。若是文中有什么问题,希望诸位看官能不惜赐教,谢谢。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只爱喝coke的小鳄鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值