C++ 数组名a、数组名取地址&a、数组首地址&a[0]、数组指针*p

数组名a:
数组名可以作为数组第一个元素的指针。由数组和指针的关系知道,a代表这个地址数值,它相当于一个指针,指向第一个元素(&a[0]),即指向数组的首地址。数组中的其他元素可以通过a的位移得到,此时的进阶是以数组中单个的元素类型为单位的,即a+i = &a[i] 

数组名取地址&a:
对于一个普通的变量b,&b是指用取地址符号取得变量b的存放地址;a在内存中没有分配空间,只对数组a的各个元素分配了存储空间,此处数组名字a显然不是普通的变量,&a也不代表所取a的存储地址。

&a在数值上等于&a[0],也等于a。此时,&a数值上等于整个数组的起始位置地址,含义上代表整个数组所占内存的大小,因为它的进阶单位是整个数组的字节长度,&a + 1 等于的是数组结束之后的下一段的起始位置地址。

数组首地址&a[0]:
这个就是取地址的最直接的应用,a[0]在内存中实际分类存储空间,而&a[0]就是取该存储空间的地址,这与对于任意满足范围的i,&a[i]就是取第i个元素的存储地址一样。

数组指针*p:
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。经常用取地址符&将某个变量的地址赋给它如int *p=&a,同时常常对指针用取值符号*取得对应地址的内容(*p)。

#include<iostream>
using namespace std;
int main(){
	int a[5]={1,2,3,4,5};
	int *p=&a[0];//指针指向第一个元素
	cout<<"a:      "<<a<<endl; 
	cout<<"&a:     "<<&a<<endl;
	cout<<"&a[0]:  "<<&a[0]<<endl;
	cout<<"a+1:    "<<a+1<<endl;
	cout<<"&a+1:   "<<&a+1<<endl;
	cout<<"&a[0]+1:"<<&a[0]+1<<endl;
	cout<<"p:      "<<p<<endl;
	cout<<"p+1:    "<<p+1<<endl; 
	return 0;
}

cout<<p<<endl;被翻译为输出p指向的字符串值

cout输出的时候>>遇到'\0'的时候就会停止输出,那加一个'\0'就可以避免 输出未初始化区域的内容

 
#include<iostream>
using namespace std;
int main(){
	char a[5]={'g','o','o','d','\0'};
	char *p=&a[0];//指针指向第一个元素
	cout<<"a:      "<<a<<endl; 
	cout<<"&a:     "<<&a<<endl;
	cout<<"&a[0]:  "<<&a[0]<<endl;
	cout<<"a+1:    "<<a+1<<endl;
	cout<<"&a+1:   "<<&a+1<<endl;
	cout<<"&a[0]+1:"<<&a[0]+1<<endl;
	cout<<"p:      "<<p<<endl;
	cout<<"p+1:    "<<p+1<<endl; 
	return 0;
}

  • 20
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值