c++数组传参
最近感觉老是碰到数组传参的问题,特别是二维的数组,每次报错都感觉头疼,烦躁;这里必须总结一下了,先把暂时能解决的问题写在这吧,以便以后碰到查看!
先看一个一维数组传参:这样用数组传参是很不安全的;会输出乱码。原因是函数返回的是一个数组,其保存的字符串" "存储在栈中,函数结束后存储该字符串的内存(也就是栈上的内存)被编译器自动释放了。
恩今天3-21;遇到了一个新的问题比较有意思;关于数组。
void print_1 (int n, int *a )
{
//for(int i=0;i<n;i++){
a[n]={,,};//为什么数组不允许这么赋值?
}
}
int main(){
int n=;
int datas[n]={};
print_1(n, datas);
for (int i = ; i < n; ++i)
cout << datas[i] << " ";
return ;
}
编译器报的错:error: cannot convert '<brace-enclosed initializer list>' to 'int' in assignment
因为在main()里,已经对datas这个数组初始化了,那么datas这个数组名作为一个指针,已经指向了内存中的一个位置,so不能再次对它初始化,所以只能用循环语句
给它赋值,让他指向新的内存单元。
#include<iostream>
using namespace std;
#define A 5
char * init_code(){//声明是这样的;
char list[A]={'a','b','c','d','e'};
return list;//这样是没问题的,它传的只是list这个指针的地址,并不会传这个数组的大小;
}
int main(){
char *tt=init_code();//调用时是这样的;
for(int i=;i<A;i++){//这里定义了地址之后的大小;
cout<<tt[i]<<endl;//在函数中是这样的;
}
return ;
}

二维数组的传参:
#include<iostream>
using namespace std;
typedef char(*R)[];//定义二维数组R类型
R func(){
char list[][];//这里的char还不能写为R;
for(int i=;i<;i++){
for(int j=;j<;j++){
list[i][j]='a';
}
}
return list;
}
int main(){
R x=func();//此时x是二维数组类型的,将返回值付给他;
for(int i=;i<;i++){
for(int j=;j<;j++){
cout<<x[i][j];//如此调用
}
cout<<endl;
}
return ;
}

一维数组的调用方法上边那个是不对的,正确的应该是下边:
void print_1 (int n, int *datas )
{
for (int i = ; i < n; ++i)
{
cout << datas[i] << " ";
}
cout << endl;
}
int main(){
const int N = ;
int datas[N] = {, , };
print_1 (N, datas);
return ;
}
或者这样:
template<int N>//模板是个好东西,可以让传入的参数的类型变为一个变
//值,从而简化代码冗余
void print_4 (int (&datas)[N])
{
for (int i = ; i < N; ++i)
{
std::cout << datas[i] << " ";
}
std::cout << std::endl;
}
int main(){
const int N = ;
int datas[N] = {, , };
print_4 (datas);
int datas2[N - ] = {, };
print_4 (datas2);
}
c++数组传参的更多相关文章
- c/c++ 数组传参
在c/c++中,在进行数组传参时,数组的元素个数默认是不作为实参传入调用函数,也就是说c/c++ 不允许向函数传递一个完整的数组作为参数 实例: 1.形式参数是一个指针,实参包括数组长度: 1 voi ...
- C和C++引用传递和数组传参引用
引用传递有两种传参方式,具体可参考文章 概括地讲,就是 *声明一个形参是指针,所以需要传递指针实参,对应的函数实现也应当遵循指针的语法.这种实现思路并不针对于C或者C++,因为它们都有指针,所以都可以 ...
- C# 数组 深拷贝 和 数组传参
前言 C#中引用类型无法使用const,因此传参的时候使用引用类型,一定要注意是否会改变其值.下面介绍几种 数组的 深拷贝方法. 前提 下面的测试代码有一些前提, sw为Stopwatch nForT ...
- C++中用二维数组传参时形参该怎样写[转]
二维数组的存储方式是和一维数组没什么区别,但是用二维数组做参数,它的形参该怎样写? 要注意的是:函数中的形参其实就相当于一个声明,并不产生内存分配,形参的目的就是要让编译器知道函数参数的数据类型. 正 ...
- C语言学习笔记 (006) - 二维数组传参的三种表现形式
# include <stdio.h> # include <stdlib.h> # define M # define N int getdate(int (*sp)[M]) ...
- c指针与数组,传参问题,指针数组与数组指针的区别,二维数组动态内存分配
一 数组的结构:顺序存储,看谭浩强中的图,牢记 1.数组名指代一种数据结构:数组 现在可以解释为什么第1个程序第6行的输出为10的问题,根据结论1,数组名str的内涵为一种数据结构,即一个长度为10的 ...
- 【C/C++】二维数组的传参的方法/二维字符数组的声明,使用,输入,传参
[问题] 定义了一个子函数,传参的内容是一个二维数组 编译提示错误 因为多维数组作为形参传入时,必须声明除第一位维外的确定值,否则系统无法编译(算不出偏移地址) [二维数组的传参] 方法一:形参为二维 ...
- JSON传参
通过javascript将数据组织成json格式,然后传到java后台. 注意:前台json数组传参到后台时候需要将对象(json或json数组)转换成字符串(字符串数组). Simple: 1.前台 ...
- 9-11.Yii2.0框架控制器分配视图并传参xss攻击脚本视图的过滤
目录 一维数组传参 新建控制器: 新建view模板 二维数组传参 新建控制器: 新建view模板 视图非法字符的过滤 新建控制器: 新建view模板 一维数组传参 新建控制器: D:\xampp\ht ...
随机推荐
- C# Winform ComBox三种赋值方式
https://www.cnblogs.com/ingstyle/p/4815303.html 第一种方法: DataTable dt = new DataTable(); dt.Columns.Ad ...
- Lintcode155-Minimum Depth of Binary Tree-Easy
155. Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum depth is ...
- 百度ueditor上传图片时如何设置默认宽高度
百度ueditor上传图片时如何设置默认宽高度 一.总结 一句话总结:直接css或者js里面限制一下就好,可以用html全局限制一下图片的最大高度 直接css或者js里面限制一下就好,可以用html全 ...
- 【转】 HDMI介绍与流程
转自:https://www.cnblogs.com/TaigaCon/p/3840653.html HDMI,全称为(High Definition Multimedia Interface)高清多 ...
- 在docker中快速创建包含ip相关tool的ubuntu镜像
在docker学习中需要创建轻量级的,包含ip相关工具的容器,支持ping,ip,ethtool,brctrl等相关指令. 下面就是快速创建一个满足需求的ubunut镜像的过程: 1) 在docker ...
- 关于oracle数据库中获取版本号类数据最大值的sql
目前还在高度加班中,但是本次内容怕自己忘记,好不容易解决的,所以赶紧先随便抽点时间记录下,也没来得及考虑效率什么的优化问题,免得以后忘记了. 测试库结构如下: 表名为 testtab 字段名为test ...
- C#高级编程(第九版) 知识点梳理
---恢复内容开始--- 第二章 核心C# 2.7 命名空间可以使用别名,但是这样做有什么好处? 2.12 C#预处理器指令 #define DEBUG #if DEBUG Console.Write ...
- 分别用Excel和python进行日期格式转换成时间戳格式
最近在处理一份驾驶行为方面的数据,其中要用到时间戳,因此就在此与大家一同分享学习一下. 1.什么是时间戳? 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01 ...
- 远程桌面控制winsever,复制文件或者文件夹夹时出错提示“未指定的错误” 二(如何让远程电脑识别U盘)
一.背景: 要给远程服务器安装数据库,把安装复制到服务器,出现复制文件或者文件夹夹时出错提示“未指定的错误”:通过映射网络分享文件方法来解决,发现服务器访问网络出现错误,ping分享文件电脑的IP ...
- redist命令操作(二)--哈希Hash,列表List
1.Redis 哈希(Hash) 参考菜鸟教程:http://www.runoob.com/redis/redis-hashes.html Redis hash 是一个string类型的field和v ...