C++中数组与指针的关系
我们通常有这样的疑惑,数组的名字是一个指向数组首元素或者说是首地址的指针,那么数组的使用就有两种方式一种是直接使用数组的下标访问,另一种是通过数组的首地址指针进行寻址
那么数组的名字和数组指针到底是不是一回事呢?
一、数组a与int *a的区别在于,数组a的指向不可更改,这也符合数组的定义时的逻辑,数组就是一段在内存中连续的存储单元,无论时地址还是大小一旦创建就已经确定不能更改。
因此数组名的本质是const int*而不是简单的int *,这也同样是为什么数组可以通过字符串直接赋值(C++中字符串也是const char *),而字符型指针不能通过字符串赋值的原因
#include<iostream> using namespace std; //探讨数组与指针的关系 int main() { /* 我们通常有这样的疑惑,数组的名字是一个指向数组首元素或者说是首地址的指针,那么数组的使用就有两种方式一种是直接使用数组的下标访问,另一种是通过数组的首地址指针进行寻址 那么数组的名字和数组指针到底是不是一回事呢? */ //数组名与数组指针的区别 char a[10] = { 0 }; char * b; /* 数组a与int *a的区别在于,数组a的指向不可更改,这也符合数组的定义时的逻辑,数组就是一段在内存中连续的存储单元,无论时地址还是大小一旦创建就已经确定不能更改。 因此数组名的本质是const int*而不是简单的int *,这也同样是为什么数组可以通过字符串直接赋值(C++中字符串也是const char *),而字符型指针不能通过字符串赋值的原因 */ string x = "asasas"; char a[10] = "asaasa"; b = x;//报错 return 0; }
二、由于数组的本质是const int *,因此当函数以数组作为形参的时候,我们同样可以将int *传递进去(int *可以赋值或替代const int*的位置,此内容在《C++中关于string、char*、char[ ]的说明》有所介绍)
void output1(char a[]) { } int main() { char a[10]; char* b; output1(a); output1(b); }

浙公网安备 33010602011771号