#include "iostream"
#include "stdio.h"
using namespace std;
int main()
{
//s是该一维的数组名,也是数组的首地址,其基类型大小是数组元素a[]大小
char s[] = "abcde";
//s += 2; // ---error s既是数组名,也是地址 s += 1,表示跳过整个数组了。
cout<<sizeof(s)<<endl;
//s = s+2;------error
printf("%c\n",s[0]);
//s++; ----error
cout<<(*(s+2))<<endl; //right
char* sp = s;
sp++; //----right sp是纯粹的地址,没有数组名的压力
cout<<(*sp)<<endl;
int t[5] = {1,2,3,4,6};
cout<<(*(t+2))<<endl;
char* p = "abcde";
p +=2;
cout<<p[0]<<endl;
/**
*二维数组名a应理解为一个行指针,基类型大小为一行元素的数组大小
*
*二维数组中,a[0]、a[1]、a[2]都是一维数组名,
*同样也代表一个不可变的地址变量,其值依次为二维数组每行第一个元素的地址,
*其基类型就是数组元素a[][]的类型。
*/
int b[3][3] = {{1,2,3},{3,5,6}};
//b=b+1;---error
//cout<<(*(*b+1))<<endl; //*b是b[0],即b[0]这一行的首地址,(*b+1)是b[0][1]的地址
cout<<(**(b+1))<<endl; //b是二维数组首地址,而该二维数组的元素是b[0], b[1], b[2]。b+1是b[1]的地址,*(b+1)是b[1],而b[1]也是数组名(一维),即是b[1]这一行的首地址
cout<<(*(b[0]+1))<<endl;// 2
//以下三个值相等--都表示该数组首地址
cout<<b<<endl;
cout<<b[0]<<endl;
cout<<(&b[0][0])<<endl;
/**
0x22fef4 0x22fef4 0x22fef4
*/
string str = "dasgafasag";
cout<<sizeof(str)<<endl;
cout<<str.length()<<endl;
return 0;
}
数组名和首地址
最新推荐文章于 2023-09-07 21:59:21 发布