申请一个数组空间保存数组首地址
时间: 2023-09-18 15:10:23 浏览: 48
在 C 语言中,数组名本身就可以表示数组的首地址,无需再申请额外的空间来保存。例如,下面的代码就定义了一个包含 10 个 int 类型元素的数组,并将其首地址赋给指针变量 ptr:
```
int n = 10; // 数组长度
int arr[n]; // 定义一个包含 n 个 int 类型元素的数组
int* ptr = arr; // 将数组 arr 的首地址赋给指针变量 ptr
```
在上面的代码中,我们直接定义了一个包含 10 个 int 类型元素的数组 arr,并将其首地址赋给指针变量 ptr。这样,我们就可以使用指针变量 ptr 访问数组元素,例如:
```
arr[0] = 1;
*(ptr + 1) = 2;
```
需要注意的是,数组名表示数组首地址的特性只适用于数组类型,而不能用于指向数组的指针类型。例如,下面的代码是错误的:
```
int n = 10; // 数组长度
int* arr = (int*)malloc(n * sizeof(int)); // 动态申请 n 个 int 类型的空间
int* ptr = arr; // 错误:数组名 arr 不能用于指向数组的指针类型
```
在上面的代码中,我们使用 malloc 函数动态申请了一段内存空间,并将其首地址赋给指针变量 arr。然后,我们又将数组名 arr 的值赋给指针变量 ptr,这是错误的,因为数组名 arr 只能用于表示数组的首地址,而不能用于指向数组的指针类型。
相关问题
申请一个空间保存数组首地址
在 C 语言中,可以使用 malloc 函数动态申请一段连续的内存空间,然后将该空间的首地址赋给数组名,从而保存数组的首地址。下面是一个示例代码:
```
int n = 10; // 数组长度
int* arr = (int*)malloc(n * sizeof(int)); // 动态申请 n 个 int 类型的空间
if(arr == NULL) {
printf("内存申请失败!");
return -1;
}
// 将数组 arr 的首地址赋给一个指针变量 ptr
int* ptr = arr;
// 使用数组名或指针访问数组元素
arr[0] = 1;
*(ptr + 1) = 2;
// 释放动态申请的内存空间
free(arr);
```
在上面的代码中,我们通过 malloc 函数申请了一个包含 10 个 int 类型元素的内存空间,并将该空间的首地址赋给数组名 arr。然后我们又将数组名 arr 的值赋给指针变量 ptr,从而也保存了数组的首地址。最后,我们可以使用数组名或指针访问数组的元素,完成对数组的操作。注意,使用完毕后,一定要记得使用 free 函数释放动态申请的内存空间,避免内存泄漏。
如何使用动态数组来保存学生信息
使用动态数组来保存学生信息,可以使用`new`运算符动态申请一个大小为`n`的`stu`数组,存储学生信息,如下所示:
```
stu* storage = new stu[n];
```
这里的`n`是学生信息的个数,`storage`是一个指向`stu`结构体的指针,用于存储动态申请的数组的首地址。
接下来,可以使用`for`循环或其他方式,逐个输入学生信息到`storage`中:
```
for (int i = 0; i < n; i++) {
std::cout << "请输入第" << i+1 << "个学生的姓名和年龄:" << std::endl;
std::string name;
int age;
std::cin >> name >> age;
storage[i].name = name;
storage[i].age = age;
}
```
类似地,也可以使用`for`循环或其他方式,逐个输出`storage`中的学生信息:
```
for (int i = 0; i < n; i++) {
std::cout << "第" << i+1 << "个学生的姓名是:" << storage[i].name << ",年龄是:" << storage[i].age << std::endl;
}
```
最后,使用`delete[]`运算符释放动态申请的内存空间:
```
delete[] storage;
```