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

来源:互联网 发布:大数据概念股票有哪些 编辑:程序博客网 时间:2024/06/07 03:32

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

数组与指针的区别:

数组:

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;   //6cout<<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*),所以我们在以数组为参数的函数中,我们就不能求数组的大小了,如果函数需要用到数组的大小,需要在定义数组的地方求出数据并一块传入。




0 0
原创粉丝点击