c++数组

每次学完数组之后就是当时学完当时特别的清楚可是过了几天却就忘今天我就把一维数组二维数组的知识点总结如下

1.一维数组常见用法如下

1.1一维数组的数组名称:

除了两种特殊的情况以外,都是指向数组第一个元素的指针。

特殊情况1:sizeof(数组名)求得的是整个数组的大小

特殊情况2:对数组名取地址,是一维的数组指针,它的步长整个一维数组的长度

一维数组名是一维数组的首地址,等于&arr[0](第一个元素的地址)

1.2一维数组指针的定义方式:

int arr[5] = { 1, 2, 3, 4, 5 };
//方法一,先定义出数组类型,再通过类型定义数组指针变量
typedef int(ARRAY)[5];//ARRARY代表存放5个int类型元素的数组 的数组类型
ARRAY arr1;//arr等同于arr可以向里面插入数据
//数组指针
ARRAY* arr2=&arr;
//方位arr2中的内容  *arr2等同于arr
for (int i = 0; i < 5;i++)
	{
		printf("%d\n", (*arr2)[i]);
	}
//方法2,先定义数组指针类型,再通过类型定义数组指针变量
typedef int(*ARRAY)[5];
//数组指针
ARRAY arr3=&arr;//遍历arr3与arr2一样
for (int i = 0; i < 5;i++)
	{
		printf("%d\n", (*arr3)[i]);
	}    
//方法3,最方便直观的一种
int(*p)[5]=&arr;  
for (int i = 0; i < 5;i++)
	{
		printf("%d\n", (*p)[i]);
	}

2.二维数组常见用法

2.1 二维数组名

二维数组名 除了两种特殊情况外,是指向第一个一维数组的 数组指针(int(*p)【3】)

特殊情况1:sizeof 统计二维数组大小

特殊情况2:对数组名称取地址 int(*p)【3】【3】 = &arr

二维数组的数组指针跟一维数组指针的定义方式类似:只是多了个维度(int(*p)【3】【3】)。

 int arr2[][3] = { {1,2,3},{4,5,6},{7,8,9} };
//二维数组的数组名是整个位数数组的首地址等价于,arr2[0]和arr2[0][0],都是二维数组的首地址
//二维数组的访问
for(int i=0;i<5;i++)
{
	for(int j=0;j<5;j++)
	{
		cout<<(*(arr2+i)+j)<<endl;
	}
}

3 不要放回局部变量的地址字符串也不行

//出现乱码,因为str是局部变量开辟在栈区,在当前函数结束就被释放,我们无权操作
char* abtain()
{
	char str[10] = "hello";
	printf("%s\n", str);
	return str;
}
int main()
{
	char* str = abtain();
	return 0;
}
//而下面这个可以  因为char* str = "hello",的内存是开辟在了常量区,常量区的内容不会随该函数的结束而释放,可以作为返回值,正确
char* abtain()
{
	char* str = "hello";
	printf("%s\n", str);
	return str;
}
int main()
{
	char* str = abtain();
	return 0;
}

转载:请标明原创,谢谢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值