用指针数组给一个整型二维数组输入数值,并求出各行元素的和
时间: 2023-05-31 17:19:34 浏览: 209
二维数组和指针
### 回答1:
题目要求:用指针数组给一个整型二维数组输入数值,并求出每行元素的和。
使用指针数组可以达到两个目的:一是动态分配内存,可避免数组的固定长度限制;二是可以直接对指向元素的指针进行计算,操作更加方便。
代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int row, col;
printf("请输入二维数组的行数和列数:");
scanf("%d%d", &row, &col);
int **arr = (int **)malloc(row * sizeof(int *)); //申请row个指针的空间
if (arr == NULL)
{
printf("申请空间失败!\n");
exit(-1);
}
for (int i = 0; i < row; i++)
{
arr[i] = (int *)malloc(col * sizeof(int)); //申请col个元素的空间
if (arr[i] == NULL)
{
printf("申请空间失败!\n");
exit(-1);
}
}
printf("请依次输入二维数组的元素值:\n");
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
scanf("%d", *(arr + i) + j); //使用指针数组输入数据
}
}
printf("每行元素的和分别为:");
for (int i = 0; i < row; i++)
{
int sum = 0;
for (int j = 0; j < col; j++)
{
sum += *(*(arr + i) + j); //使用指针数组求和
}
printf("%d ", sum);
}
for (int i = 0; i < row; i++)
{
free(arr[i]);
}
free(arr);
return 0;
}
```
### 回答2:
指针数组是由多个指向同类型变量的指针组成的数组,我们可以使用指针数组来给一个整型二维数组输入数值。
例如,定义一个3行4列的整型二维数组arr,我们可以定义一个指针数组p,使每个指针指向arr的每一行元素的首元素,即:
```c++
int arr[3][4];
int* p[3];
for(int i=0;i<3;i++){
p[i]=&arr[i][0];
}
```
这样,我们就可以通过p指针数组来输入arr的数值了,例如:
```c++
for(int i=0;i<3;i++){
for(int j=0;j<4;j++){
cin>>*(p[i]+j);
}
}
```
接下来,我们需要求出每一行元素的和,可以使用循环嵌套的方法,依次遍历每一行的元素求和:
```c++
int sum[3];//存储每一行元素的和
for(int i=0;i<3;i++){
sum[i]=0;//初始化为0
for(int j=0;j<4;j++){
sum[i]+=*(p[i]+j);//将每个元素加起来
}
}
```
最后,我们可以打印出每行元素的和:
```c++
for(int i=0;i<3;i++){
cout<<"第"<<i+1<<"行元素的和为:"<<sum[i]<<endl;
}
```
完整代码如下:
```c++
#include <iostream>
using namespace std;
int main()
{
int arr[3][4];
int* p[3];
for(int i=0;i<3;i++){
p[i]=&arr[i][0];
}
for(int i=0;i<3;i++){
for(int j=0;j<4;j++){
cin>>*(p[i]+j);
}
}
int sum[3];
for(int i=0;i<3;i++){
sum[i]=0;
for(int j=0;j<4;j++){
sum[i]+=*(p[i]+j);
}
}
for(int i=0;i<3;i++){
cout<<"第"<<i+1<<"行元素的和为:"<<sum[i]<<endl;
}
return 0;
}
```
### 回答3:
指针数组给一个整型二维数组输入数值,需要分两步完成。首先,定义一个二维数组和一个指针数组,然后将指针数组的每个元素指向二维数组的每一行,再通过循环给二维数组的每个元素赋值。具体实现过程如下:
```c++
const int ROW = 3; // 定义二维数组的行数
const int COL = 4; // 定义二维数组的列数
int arr[ROW][COL]; // 定义一个二维数组
int* ptr[ROW]; // 定义一个指针数组
// 将指针数组的每个元素指向二维数组的每一行
for (int i = 0; i < ROW; i++) {
ptr[i] = arr[i];
}
// 给二维数组的每个元素赋值
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
cout << "请输入第" << i+1 << "行第" << j+1 << "列的元素:";
cin >> *(ptr[i]+j);
}
}
```
接下来,我们需要求出各行元素的和。可以使用一个一维数组来保存每行元素的和,再通过循环计算出并输出。具体实现过程如下:
```c++
int sum[ROW]; // 定义一个一维数组来保存每行元素的和
// 计算每行元素的和
for (int i = 0; i < ROW; i++) {
sum[i] = 0; // 初始化每行元素的和为0
for (int j = 0; j < COL; j++) {
sum[i] += *(ptr[i]+j); // 累加每行元素的值
}
}
// 输出每行元素的和
for (int i = 0; i < ROW; i++) {
cout << "第" << i+1 << "行的元素之和为:" << sum[i] << endl;
}
```
最终,我们通过指针数组给二维数组输入了数值,并求出了各行元素的和。
阅读全文