C语言中,如何把二维数组传递出到主函数中?

Dingnifei123 2010-09-13 04:34:42
加急!!

int func(int *nCount, char *p[])  /* 二维数组这么定义正确吗,为什么传不出呢? */
{
// 要把如下的字符串传出到p中,
strcpy(p[0],"test1");
strcpy(p[1],"test2123");
strcpy(p[2],"test3_25626");
strcpy(p[3],"te4");
*nCount = 4;
}

main()
{
char srcArr[50][50]; // 如何把函数中的值传递到srcArr数组中,
int nCount;
func(&nCount, srcArr); // 好像这么调用不正确?
}
...全文
439 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunlin7 2010-09-14
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "string.h"

int func(char p[50][50], int *nCount)
{
strcpy(p[0],"test1");
strcpy(p[1],"test2123");
strcpy(p[2],"test3_25626");
strcpy(p[3],"te4");
*nCount = 4; // 确保 nCount < dimCount
return *nCount;
}

int main(int argc, char *argv[])
{
int nCount;
char srcArr[50][50];
func(srcArr, &nCount);
return 0;
}
Waiting4you 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 dingnifei123 的回复:]

引用 3 楼 waiting4you 的回复:
C/C++ code
int func(int *nCount, char (*p)[50])

如何调用呢?
[/Quote]
居然说如何调用?把你的那个func改成这个不就能编译了?
Dingnifei123 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 waiting4you 的回复:]
C/C++ code
int func(int *nCount, char (*p)[50])
[/Quote]
如何调用呢?
Dingnifei123 2010-09-13
  • 打赏
  • 举报
回复
7楼,


func(50, 50, srcArr, &nCount);
// srcArr 出错: cannot convert parameter 3 from 'char [50][50]' to 'char *'



Dingnifei123 2010-09-13
  • 打赏
  • 举报
回复
楼上,

func(50, 50, srcArr, &nCount); // srcArr 出错: cannot convert parameter 3 from 'char [50][50]' to 'char *'

anyingliesou 2010-09-13
  • 打赏
  • 举报
回复
#include <iostream>
#include <Windows.h>
using namespace std;
int func(int *nCount, char *p[]) /* 二维数组这么定义正确吗,为什么传不出呢? */
{
// 要把如下的字符串传出到p中,
strcpy(p[0],"test1");
strcpy(p[1],"test2123");
strcpy(p[2],"test3_25626");
strcpy(p[3],"te4");
*nCount = 4;
return 0;
}

int main()
{
char* srcArr[50]; // 如何把函数中的值传递到srcArr数组中,
for(int i=0;i<50;i++)
srcArr[i]=new char();
int nCount;
func(&nCount, srcArr); return 0;
}
像你这样的传的传,你就得把
int func(int *nCount, char* p[]) /* 二维数组这么定义正确吗,为什么传不出呢? */
{
// 要把如下的字符串传出到p中,
strcpy(p[0],"test1");
strcpy(p[1],"test2123");
strcpy(p[2],"test3_25626");
strcpy(p[3],"te4");
*nCount = 4;
return 0;
}

int main()
{
char srcArr[50][50];
char* p[50];
for(int i=0;i<50;i++)
p[i]=srcArr[i];
int nCount;
func(&nCount, p); return 0;
}
sunlin7 2010-09-13
  • 打赏
  • 举报
回复
C语言里面二维数组char a[x][y],其数组名a实际上是char *p类型(而非char *p[]类型)。
----不过C++里面并不这样看待数组名。

楼主的
    strcpy(p[0],"test1");
strcpy(p[1],"test2123");
strcpy(p[2],"test3_25626");
strcpy(p[3],"te4");

结果是 srcArr[0]={"tttt"},srcArr的其它数组均未变化。

解决办法:

int func(int dimLen, int dimCount, char *p, int *nCount)
{
strcpy(p + 0 * dimLen,"test1");
strcpy(p + 1 * dimLen,"test2123");
strcpy(p + 2 * dimLen,"test3_25626");
strcpy(p + 3 * dimLen,"te4");
*nCount = 4; // 确保 nCount < dimCount
return nCount;
}

int main(int argc, char *argv[])
{
int nCount;
char srcArr[50][50];
func(50, 50, srcArr, &nCount);
}


oyljerry 2010-09-13
  • 打赏
  • 举报
回复
void func(int *p, int n, int m)
{
for(int i=0; i < n; i++)
for(int j=0; j < m; j++)
p[i*m+j]=i+j;
}
void main(){
int a[2][3];
int *p = &a[0][0];
func( p, 2, 3);
cout << a[1][2] <<endl;
cout<<"end"<<endl;
return;
}
雪影 2010-09-13
  • 打赏
  • 举报
回复
可使用办法
方法1:
int func(int *nCount, char p[50][50])

方法2:
int func(int *nCount, char** p,int heighr,int width)

补充:
数组指针当参数传递容易,就是不知道多长容易出问题,最好把高度宽度一起传过去更安全
先准备好这个二维数组 a[1000000][1000000]
double** a;
int height = 1000000;
int width = 1000000;
a = new double*[height];
for(int i=0; i<height; i++)
{
a[i] = new double[width];
}

函数原型 void MyFunc(double**a,int heighr,int width);
用height width来保证数据不越界。
delete也这样来释放用的空间。
个人习惯不同,我觉得这样更安全一些。
Eleven 2010-09-13
  • 打赏
  • 举报
回复
你完全可以用一维做参数,再加上2个int类型参数,分别表示行号和列号
Waiting4you 2010-09-13
  • 打赏
  • 举报
回复
int func(int *nCount, char (*p)[50]) 
真相重于对错 2010-09-13
  • 打赏
  • 举报
回复
为何不用vector<string>
Csuxiaowu 2010-09-13
  • 打赏
  • 举报
回复
那个是指针数组
你可以换成**p试试
“新概念C语言”突破了以往任何一种语言教材的旧的模式,将教学内容分为入门篇和提高篇两个篇章。在入门篇只引进程序设计必要的语法现象,达到快速入门。激发兴趣的目的。在入门篇和提高篇之间插一个强化上机实验周,巩固学习内容。在提高篇完成完整的语法、算法、程序设计思想等教学目的的学习任务。由于学生对语言已具有了初步的了解并掌握了最基本的语法和程序设计思想,能设计较简单的程序,所以在提高篇的学习,不论对灵活语法的学习和掌握,还是对程序设计思想的掌握都更加容易,从而可以较容易达到教学目标。 第一部分 入门篇 1 第1章 C语言的产生及其工作流程 3 1.1 C语言的产生 3 1.2 程序和程序设计 3 1.2.1 C程序 3 1.2.2 程序设计 4 习题 4 第2章 C程序设计的初步知识 5 2.1 简单C程序的构成和格式 5 2.2 常量、变量和标识符 6 2.2.1 标识符 6 2.2.2 常量 7 2.2.3 用定义一个符号名的方法来代表一个常量 7 2.2.4 变量 8 2.3 整型数据 8 2.3.1 整型常量 8 2.3.2 整型变量 8 2.4 实型数据 9 2.4.1 实型常量 9 2.4.2 实型变量 9 2.5 字符型数据 10 2.5.1 字符常量 10 2.5.2 字符串常量 11 2.5.3 字符变量 11 2.6 算术表达式 11 2.6.1 基本的算术运算符 11 2.6.2 运算符的优先级、结合性和算术表达式 12 2.6.3 强制类型转换表达式 13 2.7 赋值表达式 13 2.7.1 赋值运算符和赋值表达式 13 2.7.2 赋值运算的类型转换 14 习题 15 第3章 顺序结构程序 16 3.1 复合语句和空语句 16 3.1.1 复合语句 16 3.1.2 空语句 16 3.2 程序举例 16 习题 17 第4章 选择结构 19 4.1 关系运算和逻辑运算 19 4.1.1 C语言的逻辑值 19 4.1.2 关系运算符和关系表达式 19 4.1.3 逻辑运算符和逻辑表达式 20 4.2 if语句和用if语句构成的选择结构 21 习题 22 第5章 循环结构 25 5.1 for语句和用for语句构成的循环结构 25 5.1.1 for语句构成的循环结构 25 5.1.2 for循环的执行过程 25 5.1.3 有关for语句的说明 25 5.2 循环结构的嵌套 27 习题 28 第6章 函数 30 6.1 函数的定义和返回值 30 6.1.1 函数定义的语法 30 6.1.2 函数的返回值 30 6.2 函数的调用 32 6.2.1 函数的调用方式 32 6.2.2 函数调用时的语法要求 32 6.3 函数的说明 33 6.3.1 函数说明的形式 33 6.3.2 函数说明的位置 34 6.4 调用函数和被调用函数之间的数据传递 34 6.5 库函数 36 6.6 数据输入输出及常用库函数 37 6.6.1 printf函数(格式输出函数) 37 6.6.2 scanf函数(格式输入函数) 39 6.6.3 调用putchar和getchar函数输出和输入字符 40 6.7 程序举例 41 习题 43 第7章 数组 45 7.1 一维数组的定义和一维数组元素的引用 45 7.1.1 一维数组的定义 45 7.1.2 一维数组元素的引用 46 7.1.3 一维数组的初始化 46 7.1.4 一维数组的定义和数组元素引用举例 47 7.2 函数之间对一维数组和数组元素的引用 47 7.2.1 数组元素做实参 47 7.2.2 数组名做实参 49 7.3 一维数组应用举例 50 7.4 字符数组 53 7.4.1 字符数组的定义 53 7.4.2 字符数组的初始化 54 7.4.3 字符数组的引用 54 7.4.4 字符串与字符串结束标志 55 7.4.5 字符数组的输入输出 56 7.4.6 字符串处理函数 58 7.4.7 字符数组应用举例 60 习题 61 第8章 文件 63 8.1 C语言文件的概念 63 8.2 打开文件 64 8.3 关闭文件 65 8.4 调用getc(fgetc)和putc(fputc)等常用函数进行输入和输出 65 8.5 判断文件结束函数feof 68 习题 69 第二部分 提高篇 71 第9章 算法 73 9.1 算法 73 9.2 结构化程序设计和模块化结构 74 9.2.1 结
目 录第1章 MATLAB简介... 1 1.1 MATLAB概述... 1 1.2 MATLAB环境... 1 1.2.1 MATLAB安装... 1 1.2.2 MATLAB启动与退出... 4 1.3 MATLAB的开发环境... 5 1.3.1 工作界面... 5 1.3.2 命令窗口... 6 1.3.3 当前目录浏览器窗口... 8 1.3.4 工作空间浏览器窗口... 9 1.3.5 历史命令窗口... 10 1.3.6 数组编辑器窗口... 11 1.4 MATLAB帮助系统... 11 1.4.1 帮助命令... 11 1.4.2 帮助窗口... 12 1.4.3 演示系统... 13 第2章 MATLAB数值计算及应用... 15 2.1 MATLAB的数值计算基础... 15 2.1.1 数据类型... 15 2.1.2 常量和变量... 18 2.1.3 数值计算应用的示例... 19 2.2 MATLAB的数组、矩阵运算... 20 2.2.1 数组与矩阵的概念... 20 2.2.2 数组或矩阵元素的标识... 21 2.2.3 数组与矩阵的输入... 23 2.2.4 数组与矩阵的算术运算... 25 2.2.5 向量及其运算... 32 2.2.6 矩阵的特殊运算... 35 2.2.7 数组的运算... 44 2.2.8 字符串... 47 2.3 MATLAB多项式及其运算... 47 2.3.1 多项式求值... 48 2.3.2 多项式求根... 48 2.3.3 部分分式展开... 49 2.3.4 多项式乘除... 50 2.3.5 多项式的微积分... 50 2.4 插值与拟合... 51 2.4.1 一维插值问题... 51 2.4.2 二维插值问题... 52 2.4.3 曲线拟合... 56 2.5 线性方程组求解... 58 2.5.1 方程组解法... 58 2.5.2 求线性方程组的通解... 65 2.6 非线性方程与最优化问题... 67 2.6.1 非线性方程数值求解... 67 2.6.2 无约束最优化问题求解... 69 2.6.3 有约束最优化问题求解... 71 第3章 符号运算及应用... 73 3.1 MATLAB符号运算基础... 73 3.1.1 符号表达式... 73 3.1.2 符号表达式的操作及代数运算... 75 3.2 MATLAB符号微积分运算... 82 3.2.1 符号极限运算... 82 3.2.2 符号函数微分运算... 82 3.2.3 符号函数积分运算... 83 3.2.4 符号求和函数与级数展开函数... 84 3.3 复变函数运算的MATLAB实现... 86 3.3.1 复数的概念... 86 3.3.2 复变量的函数... 86 3.3.3 复数的生成及其矩阵创建... 87 3.3.4 复数的几何意义... 88 3.3.5 MATLAB在复数代数运算的实现... 90 第4章 MATLAB程序设计技术... 93 4.1 MATLAB的控制语句... 93 4.1.1 条件控制... 93 4.1.2 循环控制... 96 4.1.3 错误控制... 98 4.2 M文件编程... 99 4.2.1 M文件的分类介绍... 99 4.2.2 函数调用和变量传递... 101 4.2.3 数据导入与导出... 107 4.2.4 示例分析... 111 4.3 函数类型... 118 4.3.1 主函数... 118 4.3.2 子函数... 119 4.3.3 私有函数... 119 4.3.4 嵌套函数... 120 4.3.5 重载函数... 124 4.4 调试程序... 124 4.4.1 调试程序介绍... 124 4.4.2 MATLAB调试菜单... 125 4.4.3 调试命令... 126 第5章 MATLAB绘图功能... 129 5.1 二维图形绘制... 129 5.1.1 绘制二维曲线的常用函数... 129 5.1.2 绘制图形的辅助操作... 132 5.1.3 绘制二维图形的其他函数... 137 5.2 三维图形绘制... 141 5.2.1 绘制三维曲线的常用函数... 141 5.2.2 三维曲面图绘制... 142 5.2.3 其他三维图形绘制... 146 5.2.4 透明度作图... 147 5.2.5 立体可视化... 148 5.3 图形颜色映像的应用... 151 5.4 光照和材质处理... 153 5.4.1 光照处理... 153 5.4.2 材质处理... 154 5.5 图像显示技术... 156 5.5.1 图像简介... 156 5.5.2 图像的读取... 157 5.5.3 图像的显示... 159 5.6 动画制作技术... 159 第6章 MATLAB在模糊控制系统的应用... 161 6.1 模糊系统的MATLAB实现... 161 6.1.1 模糊集简介... 161 6.1.2 模糊推理系统与MATLAB应用... 166 6.1.3 模糊推理系统的MATLAB模糊工具箱的图形界面实现法... 166 6.2 MATLAB模糊逻辑工具箱命令函数及示例... 173 6.3 MATLAB模糊逻辑工具箱命令函数应用示例... 193 第7章 MATLAB在人工神经网络的应用... 197 7.1 人工神经网络介绍... 197 7.2 感知器... 197 7.2.1 感知器原理... 198 7.2.2 感知器相关函数... 199 7.2.3 感知器的MATLAB实现... 202 7.3 线性神经网络... 203 7.3.1 线性神经网络原理... 204 7.3.2 线性神经网络相关函数... 204 7.3.3 线性神经网络的MATLAB实现... 206 7.4 BP网络... 207 7.4.1 BP网络原理... 207 7.4.2 BP网络相关函数... 208 7.4.3 BP网络的MATLAB实现... 217 7.5 径向基网络... 218 7.5.1 径向基网络原理... 218 7.5.2 径向基网络相关函数... 219 7.5.3 径向基网络应用示例... 222 7.6 回归网络... 223 7.6.1 回归网络相关函数... 223 7.6.2 回归网络的MATLAB实现... 224 第8章 MATLAB在自动控制的应用... 227 8.1 控制系统模型... 227 8.1.1 控制系统的描述与LTI对象... 227 8.1.2 典型系统的生成... 228 8.1.3 连续系统与采样系统之间的转换... 230 8.2 控制系统的时域分析... 231 8.2.1 时域分析的一般方法... 231 8.2.2 常用时域分析函数... 234 8.2.3 时域分析应用示例... 237 8.3 根轨迹分析... 238 8.3.1 模条件和角条件... 239 8.3.2 绘制根轨迹的规则... 239 8.3.3 根轨迹的应用示例... 240 8.4 控制系统的频域分析... 243 8.4.1 幅相频率特性... 243 8.4.2 对数频率特性... 245 8.4.3 对数幅相特性... 248 8.5 系统校正... 248 8.5.1 串联超前校正... 248 8.5.2 串联滞后校正... 251 8.5.3 串联滞后—超前校正... 252 8.6 极点配置设计方法... 255 8.6.1 Gura-Bass算法... 255 8.6.2 Ackermann配置算法... 256 第9章 MATLAB在数字信号的应用... 259 9.1 数字信号知识... 259 9.1.1 信号产生... 259 9.1.2 信号的运算... 265 9.1.3 信号的抽取与插值... 267 9.2 离散时间傅里叶变换... 269 9.2.1 离散时间傅里叶变换定义及计算... 269 9.2.2 离散时间傅里叶变换的特性... 271 9.3 数字滤波器的分析与实现... 273 9.3.1 数字滤波器知识... 273 9.3.2 数字滤波器的分析与实现... 274 9.4 IIR数字滤波器的设计法... 278 9.4.1 冲激响应不变法... 278 9.4.2 双线性变换法... 279 9.4.3 IIR数字滤波器的频率变换设计法... 279 9.5 FIR数字滤波器设计法... 283 9.5.1 窗函数设计法... 283 9.5.2 频率抽样法... 286 9.5.3 MATLAB的其他相关函数... 289 9.6 MATLAB实现功率谱估计... 292 第10章 MATLAB外部程序接口应用... 295 10.1 MATLAB数据接口... 295 10.1.1 通用文件I/O操作... 295 10.1.2 低级文件I/O操作... 296 10.1.3 MAT文件及其应用... 300 10.2 MATLAB编译器的配置... 304 10.2.1 MATLAB编译器的配置... 304 10.2.2 编译指令... 305 10.3 MATLAB引擎... 306 10.3.1 MATLAB DDE服务器与引擎库... 306 10.3.2 C语言MATLAB引擎... 307 10.3.3 Fortran语言MATLAB引擎... 310 10.4 Visual C++与MATLAB接口... 311 10.4.1 Visual C++调用MATLAB引擎... 312 10.4.2 Visual C++使用数学函数库... 312 10.4.3 Visual C++创建MAT文件... 314 10.4.4 应用COM实现Visual C++与MATLAB的接口... 316 第11章 MATLAB在其他领域的应用... 323 11.1 MATLAB在电路的应用... 323 11.1.1 概述... 323 11.1.2 MATLAB在电路的应用示例... 323 11.2 MATLAB在图像处理的应用... 326 11.2.1 图像变换... 327 11.2.2 MATLAB实现图像的边缘检测... 328 11.2.3 MATLAB在遥感实现图像直方图的匹配... 330 11.3 MATLAB在力学及工程结构的应用... 333 11.3.1 概述... 333 11.3.2 MATLAB在力学及工程结构的应用示例... 333 11.4 MATLAB在优化设计的应用... 338 11.4.1 概述... 338 11.4.2 MATLAB在优化设计的应用示例... 339 参考文献 342

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧