指针和数组——面试基础(1)

本文探讨了数组和指针在编程中的不同之处。数组在静态或栈上创建,其地址和容量固定,内容可变;而指针可随时指向不同类型的内存,常用于动态内存操作,具有更高的灵活性但风险也更大。在C/C++中,无法通过 sizeof 操作符得知指针所指向内存的容量,只能获取指针本身的大小。

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

刚开始学习编程的时候总以为数组就是指针,指针就是数组,容易混淆。其实,数组和指针是有区别的。

数组与指针的区别:

数组:

1、数组要么在静态存储区被创建(全局数组),要么在栈上被创建(局部数组)

2、数组名对应着(不是指向)一块内存(大小已知),其地址与容量在生命周期内保持不变,只有数组内容       可以改变。

指针:

1、指针可以随时指向任意类型的内存块(不同类型可以通过强制类型转换来实现),它的特征是“可变的”。

2、常用指针来操作动态内存。

指针远比数组灵活,但也更危险。


比较内存内容:

char arr[] = "hello";
arr[0] = 'a';
arr指向一块确定的内存,现在数组里的内存是可以通过访问来修改的


char* p = "hello";
p[0] = 'b';
p此时指向的是一块char类型的内存地址,地址里有一个常量字符串,p[0]企图修改常量字符串内容是不被允许的,就像是你想将2赋值给1(1 = 2)一样是不被允许的。


内存容量

char arr[] = "hello";
char* p = arr;
cout<<sizeof(arr)<<endl;   //6
cout<<sizeof(p)<<endl;     //4
arr数组里包括“h e l l o \0”等六个字符,sizeof(arr)相当于求数组的容量。

在C/C++语言中没办法知道指针所指向的内存容量,sizeof(p)相当于求指针类型的大小(相当于sizeof(char*))


void fun(char arr[50])
{
<span style="white-space:pre">	</span>cout<<sizeof(arr)<<endl;//4
}
当数组作为函数的参数进行传递时,该数组自动退化成了同类型的指针,不管数组容量有多大,sizeof(arr)都是4,相当于sizeof(char*),所以我们在以数组为参数的函数中,我们就不能求数组的大小了,如果函数需要用到数组的大小,需要在定义数组的地方求出数据并一块传入。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值