C++中定义一维指针数组float* flOne[],先清空指针,后用循环和malloc为指针数组赋值
时间: 2024-03-25 09:39:07 浏览: 102
在C++中定义一维指针数组`float* flOne[]`,可以使用以下代码先清空指针,再为其赋值:
```c++
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
int size = 5; // 数组大小
float *flOne[size]; // 定义一维指针数组
// 先将每个指针指向的内存空间清空
for (int i = 0; i < size; i++) {
flOne[i] = NULL;
}
// 为每个指针分配内存空间并赋值
for (int i = 0; i < size; i++) {
flOne[i] = (float *)malloc(sizeof(float));
*flOne[i] = i + 1.0;
}
// 输出每个指针所指向的值
for (int i = 0; i < size; i++) {
cout << *flOne[i] << " ";
}
// 释放每个指针所占用的内存空间
for (int i = 0; i < size; i++) {
free(flOne[i]);
}
return 0;
}
```
输出结果为:1 2 3 4 5
相关问题
C++中定义一维指针数组并用循环和malloc为指针赋值
可以使用以下代码定义一维指针数组并用循环和malloc为指针赋值:
```c++
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
int size = 5; // 数组大小
int **arr = (int **)malloc(size * sizeof(int *)); // 定义一维指针数组
// 为每个指针分配内存空间并赋值
for (int i = 0; i < size; i++) {
*(arr + i) = (int *)malloc(sizeof(int));
**(arr + i) = i + 1;
}
// 输出每个指针所指向的值
for (int i = 0; i < size; i++) {
cout << **(arr + i) << " ";
}
// 释放每个指针所占用的内存空间
for (int i = 0; i < size; i++) {
free(*(arr + i));
}
// 释放整个指针数组占用的内存空间
free(arr);
return 0;
}
```
输出结果为:1 2 3 4 5
在函数定义中形参使用指针数组char *s[]来表示形参,即char* change(char *s[])。而在函数调用中使用二维数组,即char poem[4][20]传入实参是否可行,如果不可行,为什么不行??
在函数定义中使用指针数组 char *s[] 来表示形参,是因为指针数组本身就是一个指向指针的指针,因此可以通过指针数组来访问原始的指针,进而访问数组中的数据。
而在函数调用中使用二维数组 char poem[4][20] 传入实参,实际上是将一个二维数组的首地址传递给了指针数组。由于二维数组的内存布局和指针数组是不同的,因此编译器可能会对二者进行不同的处理。因此,如果在函数定义中使用指针数组作为形参,那么最好也使用指针数组作为实参,这样可以确保程序的正确性。
也就是说,如果要将一个二维数组传递给一个使用指针数组作为形参的函数,需要先将二维数组转换为指针数组,然后再将指针数组作为实参传递给函数。例如,可以定义一个临时的指针数组,将二维数组的每一行的首地址赋值给指针数组的对应元素,然后将指针数组作为实参传递给函数。
修改后的代码如下所示:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* change(char *s[], int n);
int main(void)
{
char poem[4][20];
int n, i;
for (i = 0; i < 4; i++)
{
fgets(poem[i], sizeof(poem[i]), stdin);
}
char* ptr[4];
for (i = 0; i < 4; i++)
{
ptr[i] = poem[i];
}
char* result = change(ptr, 4);
for (i = 0; result[i] != '\0'; i++)
{
printf("%c", result[i]);
}
return 0;
}
char* change(char *s[], int n)
{
char* a = NULL;
a = (char*)malloc(sizeof(char) * 10);
int i;
for (i = 0; i < n; i++)
{
a[2 * i] = s[i][0];
a[2 * i + 1] = s[i][1];
}
a[2 * i] = '\0';
return a;
}
```
修改后的代码中,先定义一个指针数组 ptr,将二维数组 poem 的每一行的首地址赋值给 ptr 的对应元素。然后将 ptr 作为实参传递给函数 change(),确保程序的正确性。
阅读全文