硬核,关于数组与指针那些学校老师未曾讲过的点
作者:互联网
目录
1、目标
今天想跟大家讨论的是一个被无数人忽略过的点,即数组与指针,貌似数组与指针有各种各样的相同的点,但它们的本质是不同的,今天就想带大家把数组与指针这两个容易混淆的点彻底弄明白!废话不多说,直接进入正文!
2、正文(危)
1.代码实例
#include<stdio.h> int main() { char* str = "hello"; char arr = "hell0"; return 0; }
(此处均不考虑'\0')
2.分析
(1)以指针形式定义时
注意:此处的字符串时不可被修改的!这是由操作系统所决定的。
(2)以数组形式进行定义时
注意:因为数组是在栈上编译的,所以可以被修改。
当然,此处的指针我们是指向的字符串常量区中的字符串,其实也可以指向栈区上的字符串,例如我们定义char *p = arr;此时指针就指向的是栈区上的字符串的首个元素,上面的例子主要是告诉大家:数组是数组,指针是指针,这二者永远都不要混为一谈!
结论:数组和指针的不同的主要的不同主要体现在寻址方案上,数组是直接寻址进而访问元素,而指针则是通过指针变量进行间接寻址访问元素。(重点)
从内存上就可以看出数组与指针本质上的不同,当然,指针与数组在某些方面也有相同点。下面给大家举例介绍:
3、数组和指针在应用上的相同点
(1)相同点
注意:此处的数组名代表的就是首元素的地址(字面常量),自然可以解引用。
虽然两者的语法范畴上几乎是完全一样的,但是二者的寻址方案是完全不一样的。数组的名字是一个字符常量,而指针则是一个变量。至于具体的不用,则可以根据上面的内存空间来具体看。
(2)为什么相同
C语言为什么要把指针和数组的用法设置成相同的?
(1)C语言是面向过程的语言,函数是其核心,既然使用函数就离不开定义与调用函数,为了提高效率,所以会发生降维。
(2)假设指针和数组访问方式不通用,程序员需要在不同的代码片段处,进行习惯的切换,就会增加代码出错的概率和调试的难度。
(3)为了让程序员统一使用数组,减少出错的概率,因此把数组和指针的访问方式设置成通用的。
标签:数组,讲过,定义,寻址,相同点,字符串,硬核,指针 来源: https://blog.csdn.net/m0_57304511/article/details/121618938