`
anson_xu
  • 浏览: 512995 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

C/C++语言数组作为参数传递

 
阅读更多
#include <stdio.h>
#include <iostream.h>
#include <string.h>

#define LINE 2
#define ROW 4

int array(char *szStr[ROW], int len)
{
for (int i=0; i<len; i++){
puts(szStr[i]);
}

return 0;
}

int main(int argc, char* argv[])
{
char str[LINE][ROW] = {"001","023","052","002"};

array(, 4);   //这里填写什么才会不报错?,如果我错了,请指出错在哪里.

return 0;
}


char **和char *[ ]和 char[ ][ ]的区别?

如果可以的话希望给点详细的介绍,或者给几个好一点的地址..小弟一定非常感谢..

你目前的代码中那个位置填写什么都不会没有问题的!
因为:
array函数中第一个参数你定义的不是数组指针而是指针数组,所以,你的str本质上是char(*)[4],而你array的第一个参数本质上是char**.

建议,修改arry为:int array(char szStr[][ROW], int len)

并且char str[LINE][ROW] = {"001","023","052","002"};
这种定义在LINE=2的情况下,一定会报错的吧!
至少要改成 char str[LINE][ROW] = {"001","023"};追问确实,这种做法很好,
char szStr[][ROW]是不是按值传递的啊?和charszStr[LINE][ROW]等价吗?
谢谢.



#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;

#define LINE 4   //这里改成4,因为你有4个字符串
#define ROW 4

int array(char *szStr[ROW], int len)
{
for (int i=0; i<len; i++){
puts(szStr[i]);
}

return 0;
}

int main()
{
char str[LINE][ROW] = {"001","023","052","002"};
char* szstr[4];  //写一个指针,将数组中的元素赋值给它
int i;
for (i = 0; i != 4; ++i)
{
szstr[i] = str[i];
}

array(szstr, 4);   //这里填写什么才会不报错?,如果我错了,请指出错在哪里.

return 0;
}

这种方法确实没有错,而且非常直观,
我想如果不通过第三个变量直接放到实参那里不知道还有没有其他的方法呢?
谢谢

要么修改函数为int array(char szStr[LINE][ROW], int len),要么把char str[LINE][ROW]定义为char* str[ROW]
因为str[][]是一个数组,是一个const指针,要转成*str[]必须要第三个参数
分享到:
评论

相关推荐

    C/C++数组名与指针区别深层探索

    - **数组名:** 当数组名作为函数参数传递时,实际上传递的是指向数组第一个元素的指针。这意味着传递过程中数组的大小信息丢失。 - **指针:** 指针可以作为函数参数直接传递,不会导致大小信息的丢失。 4. **...

    数组与指针的艺术.doc

    文章指出,数组和指针是C/C++语言的灵魂,它们提供了对底层操作的强大支持,是语言效率的保证。然而,由于其特殊的使用方式,数组和指针常常引发误解,甚至出现了避免使用指针的倾向,作者认为这是对C/C++潜力的浪费...

    c/c++语言参考手册

    《C/C++语言参考手册》是一本非常实用的编程指南,尤其对于正在学习或已经从事C/C++编程的初学者而言,它提供了丰富的知识和详细的功能解析。这本手册覆盖了C和C++语言的核心部分,包括语法、类型系统、控制结构、...

    C#调用C++ Dll关于结构体数组引用的传递及解析使用的展示代码

    此外,还定义了一个名为`GetDeviceIdList`的函数,它接收一个`DEVICE_INFO`结构体数组的指针以及一个整型引用`count`作为参数。 #### C#中的结构体定义 接下来,在C#中定义相应的结构体以匹配C++中的定义: ```...

    c/c++帮助文档中文

    C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域。这份"c/c++帮助文档中文"提供了丰富的中文资源,帮助开发者深入理解和掌握这两种语言。 C语言是最早由Dennis Ritchie在贝尔实验...

    简单的60题c/c++ 初学程序

    5. **函数和递归**:函数是代码重用的关键,题目可能包含函数定义、参数传递、返回值的使用以及递归函数的理解和应用。 6. **预处理器和文件包含**:预处理器在C/C++中用于宏定义、条件编译等,题目可能涉及#...

    比较完整的C/C++笔试题

    在C/C++语言中,数组类型的函数返回值实际上是指向数组第一个元素的指针。 8. 如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。(对) 在C++...

    C/C++语言面试题大全.zip

    在IT行业中,C和C++语言是基础且至关重要的编程语言,它们被广泛应用于系统级编程、游戏开发、嵌入式系统以及高性能计算等领域。针对C/C++的面试题可以帮助求职者评估其对语言核心概念的理解,算法能力,以及实际...

    64学时C/C++语言练习

    根据给定文件的信息,我们可以总结出以下C/C++语言中的关键知识点: ### 1. 标识符 在C/C++语言中,标识符是用来命名变量、函数等元素的符号。标识符必须遵循一定的规则: - 必须以字母或下划线开头。 - 后续字符...

    C/C++ 语言参考

    理解函数的定义、调用、参数传递以及递归函数是学习的关键。 3. **指针**:C/C++中的指针是其强大之处,它允许直接操作内存地址。理解指针的声明、赋值、解引用、指针数组和指针函数是掌握C/C++的重要步骤。 4. **...

    m文件转换为C,C++文件

    3. **处理输入输出参数**:在 C/C++ 代码中,需要手动构建和传递多维数组和字符串数组作为函数参数。 4. **实现绘图功能**:使用 Qt 或其他图形库来实现类似的绘图效果。 5. **打包与部署**:使用安装包制作工具(如...

    VC++数组的传递方式

    综上所述,本示例程序展示了如何在C++中有效地使用数组,特别是如何将数组作为参数传递给函数。通过这种方式,可以在不复制数组的情况下,高效地在多个函数间共享数据,这对于处理大量数据或复杂运算场景非常有用。...

    C++小知识:C/C++中不要按值传递数组

    C++小知识:C/C++中不要按值传递数组是一篇关于C++编程语言的重要知识点,介绍了在C/C++中不要按值传递数组的原因和解决方法。 在C/C++中,数组不能按值传递给函数。当你试图这样做时,是数组的指针(第一个元素的...

    嵌入式C/C++语言精华文章集锦

    - **区别**:当数组作为函数参数传递时,它会自动退化为指针;而指针可以在整个程序中自由移动。 #### 9. C/C++程序员应聘常见面试题深入剖析 这一部分收集了一些常见的面试题目,并给出了详细的解答。 - **基础...

    C/C++语言程序百例精解

    《C/C++语言程序百例精解》是一本专注于C和C++编程实践的书籍,旨在通过丰富的实例帮助读者深入理解和掌握这两种强大的编程语言。在C++中,它继承了C语言的高效性和灵活性,并引入了面向对象编程的概念,使得程序...

    c++调用C# COM 参数是结构体数组

    在 C++ 中,我们还可以使用结构体数组作为方法的参数。例如,在本例中,我们使用 `int m_Cont = 2; _CAPI_Point3d *rdd1 = new _CAPI_Point3d[m_Cont];` 来创建一个结构体数组,然后将其传递给 C# 的方法。 C# 方法...

    C/C++语言参考手册

    《C/C++语言参考手册》的PART1可能介绍了C语言的基础概念,包括语法、数据类型和基本操作。PART2可能进一步探讨了C语言的高级特性,如指针和内存管理。PART3可能覆盖了C++的面向对象特性,如类、对象和继承。而VC6LR...

    语言C/C++概述

    指针是C/C++中一个重要的概念,广泛应用于内存管理、函数参数传递等方面。 ##### 1.5 函数 - **函数**:一组执行特定任务的代码。函数可以接受参数并返回值。C/C++支持函数重载和递归调用。 #### 二、C/C++语言...

    C#调用C++的dll实例,回调函数,string和int数组参数传递

    本实例将详细介绍如何在C#中调用C++的DLL,并处理回调函数、字符串和整型数组参数的传递。 首先,C++的DLL需要定义导出函数,以便C#能够访问。这些函数通常使用`extern "C"`来避免C++的名称修饰,以确保C#能正确...

Global site tag (gtag.js) - Google Analytics