每次学完数组之后就是当时学完,当时特别的清楚,可是过了几天却就忘,今天我就把一维数组二维数组的知识点总结如下:
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;
}
转载:请标明原创,谢谢