2015-07-08 11:51:45 u013630349 阅读数 6391
  • C++编程视频教程—C++入门开发视频教程

    C++语言是C语言的超集,它扩充和完善了C语言,由于C++面向对象、模板、高效、优秀、强大的语言特性、在程序员中备受青睐,成为近25年使用为广泛的编程语言。黄强老师专为毫无编程基础的新手小白量身打造的C++语言课程体系,结合通俗易懂的课程讲解与简洁的代码演练,能够让小白们高呼我听懂了!

    5807 人正在学习 去看看 黄强

【摘要】

本文主要讨论两个小点,怎样获取主函数中整形数组的长度;自定义函数输入参数为整型数组,怎么得到该数组长度。

【正文】

很早就知道C++ 中,因为栈的回收机制,函数的返回值不可以是数组

  • 但是,能不能输入参数包含数组呢?

答案是肯定的,以指针形式传入即可。

  • 那么,问题再进一步,如果我想在函数中对数组进行遍历,可不可以呢?

答案还是肯定的。

  • 函数中接收数组的是一个数组指针,也就是把数组的函数名传进去,数组的地址被函数接受,那我们怎么知道数组的长度呢?

答案还是肯定的,我们可以用strlen函数啊。

  • 但是,再进一步,如果是整形数组呢?

这个似乎就不那么简单了。

在主函数中,数组在内存中开辟了一段内存空间,用于存贮数组变量。如果是字符数组变量很容易理解,strlen和 sizof/sizeof(char)函数都可以应付。如果是字符指针,strlen也能够处理。针对整形数组,sizeof/sizeof(int) 是最快的方式。

自定义函数中,整型数组是没有办法找到数组长度的,因为,作为指针,指向整型数组,这里是判断不出指向对象实际长度的。

所以,现提出以下两个办法

1.传入数组长度,将数组长度作为输入参数导入到自定义函数中去;

2.声明全局变量,保证使用之前正确复制即可。

2019-06-28 11:59:00 weixin_30399055 阅读数 980
  • C++编程视频教程—C++入门开发视频教程

    C++语言是C语言的超集,它扩充和完善了C语言,由于C++面向对象、模板、高效、优秀、强大的语言特性、在程序员中备受青睐,成为近25年使用为广泛的编程语言。黄强老师专为毫无编程基础的新手小白量身打造的C++语言课程体系,结合通俗易懂的课程讲解与简洁的代码演练,能够让小白们高呼我听懂了!

    5807 人正在学习 去看看 黄强

c++ 求int数组的长度

网上有一些方法是

sizeof(arr) / sizeof(arr[0]);

这种方法放在函数中,是不对的
我自己的方法是

#include <bits/stdc++.h>
using namespace std;
int ArrLength(int *Arr) {
    int i = 0;
    while (Arr[i])
        i++;
    i --;
    return i;
}
int main()
{
    int arr[10] = {73,22,93,43,55,14,28,65,39,81};
    
    cout << ArrLength(arr) << endl;
    return 0;
}

转载于:https://www.cnblogs.com/LJA001162/p/11101955.html

2012-06-09 00:05:48 qimo601 阅读数 207
  • C++编程视频教程—C++入门开发视频教程

    C++语言是C语言的超集,它扩充和完善了C语言,由于C++面向对象、模板、高效、优秀、强大的语言特性、在程序员中备受青睐,成为近25年使用为广泛的编程语言。黄强老师专为毫无编程基础的新手小白量身打造的C++语言课程体系,结合通俗易懂的课程讲解与简洁的代码演练,能够让小白们高呼我听懂了!

    5807 人正在学习 去看看 黄强
方法1、C++使用vector方便生成: 
#include <iostream> 
#include <vector> 
#include <iomanip> 
using namespace std; 
int main() 
{ 
	int i, 
	j, 
	m, //行数 
	n; //列数 

	cout << "input value for m,n:"; 
	cin>>m>>n; 

	//注意下面这一行:vector<int后两个">"之间要有空格!否则会被认为是重载">>"。 
	vector<vector<int> > vecInt(m, vector<int>(n)); 
	for (i = 0; i < m; i++) 
	for (j = 0; j < n; j++) 
	vecInt[i][j] = i*j; 

	for (i = 0; i < m; i++) 
	{ 
		for (j = 0; j < n; j++) 
			cout<<setw(5)<<vecInt[i][j]<<":"<<setw(9)<<&vecInt[i][j]; 
		cout<<endl; 
	} 

	return 0; 
}
 
方法2:用vector可以,用裸指针也可以创建,只不过要小心使用,因为很容易造成内存泄露:
int main()

{
	//类型定义,将int*指针定义成Row
	typedef int* Row;

	int row, col;

	cin >> row >> col;

	Row* rows = new Row[row];

	for(int i = 0; i < row; ++i)

	{
		//有小(),直接将各项初始化为0
		//rows[i] = new int[col]();
		rows[i] = new int[col];

	}

	for(int i = 0; i < row; ++i)

	{

		delete [] rows[i];

	}

		delete [] rows;

}
 
 
3、C++动态申请多维数组
在C++中为数组动态分配内存的格式如下:

第一步:声明
       type (p)[常量1][常量2]...[常量n];
第二步:申请
       p=new type[x][常量1][常量2]...[常量n];
说明:先定义一个n维的数组指针,其中p是一个指针变量,x是一个整形变量,
      然后申请一个第一维为x的n+1维数组,记住只有第一维x可变。
举例:
   1、动态申请一个一维数组
      int *p;
      int x;
      cin>>x;
      p=new int[x];   
   2、动态申请一个二维整型数组
      int (*p)[10];
      int x;
      cin>>x;
      p=new int[x][10];
      若执行这段程序,给x输入3,则相当于定义一个3行10列的
      一个二维数组。实际是申请3102个存储单元,并把其首
      地址返回给p,通过p来操纵这个动态数组。
   3、动态申请一个三维数组
      int (*p)[8][6];
      int x;
      cin>>x;
      p=new int[x][8][6];
       
注意:
   1、申请成功与否,看p的值,若p的值为NULL,则说明申请不成功,
      反之,则申请成功。
   2、动态申请的存储单元,使用之后应及时返还给系统,方法是:
      delete p;即可。

(new 和 delete 、 new[] 和 delete[] 对应使用)
 

2018-08-09 22:52:56 WJ_SHI 阅读数 225
  • C++编程视频教程—C++入门开发视频教程

    C++语言是C语言的超集,它扩充和完善了C语言,由于C++面向对象、模板、高效、优秀、强大的语言特性、在程序员中备受青睐,成为近25年使用为广泛的编程语言。黄强老师专为毫无编程基础的新手小白量身打造的C++语言课程体系,结合通俗易懂的课程讲解与简洁的代码演练,能够让小白们高呼我听懂了!

    5807 人正在学习 去看看 黄强

和C语言一样,C++中也存在数组,而且用法也与C语言中的一样。

  • 数组的定义:和C语言中的一样,定义一个数组需要指定其大小和类型,但注意,数组的定义不能出现未知长度或长度为变量的情况,如:
int a[5];  //定义一个长度为5的整形类的数组,即该数组中可存放5个整形数
int a[];  //产生编译错误,数组a的长度未知
int i;
int a[i]; //产生逻辑错误,因为i是未知数
//但是如下定义是合法的,但会产生警告:
int j;
cin >>j;  //从键盘中输入j的值
int b[j]; //此处会出现警告“unused variable 'b'[-Wunused-variable]”
  • 数组的赋值:数组即可以一一赋值,也可以同时赋值,还可以通过for或while循环来赋值,例如:
int a[] = {1, 2, 3, 4, 5} //定义的同时赋值,这时a的大小可以不写,编译器会根据后面数据的个数来默认a的长度,此处为5
int b[4];  //一一赋值
b[0] = 1;  //注意,数组的第一个数据一定是从0开始到长度-1
b[1] = 2;
b[2] = 3;
b[3] = 4;
int c[100];
for(int i = 0; i < 100; i++)
    c[i] = i;   //采用for循环赋值,这里的i不再是变量,因为在for循环中,每次循环i都有一个具体的值
  • 数组的输出问题:若要输出数组中的全部内容,可以采用一一输出,也可用for或while循环输出,例如:
int b[2] = {1, 2};
cout << b[0];
cout << b[1];   //一一输出
int c[100];
for(int i = 0; i < 100; i++)
    c[i] = i; 
for(int i = 0; i < 100; i++)
    cout << c[i] << "\t";  //采用for循环输出
  • 赋值与输出,如果一个数组的长度为5,但赋值的只有2个,若全部输出,则剩下的3个数输出任意数字,例如:
int a[5];
a[0] = 5;
for(int i = 0; i < 5; i++)
    cout << a[i] << endl;

输出结果:

但若采用同时赋值的方法,则其他的默认为0:

int a[5] = {5};
for(int i = 0; i < 5; i++)
    cout << a[i] << endl;

输出结果:

  • 数组所占空间:如果数组只是定义,并没有初始化(赋值),那么该数组所占的空间只是首地址的空间,但如果初始化了(赋值了),则该数组所占空间为长度×数组类型所占空间,不论是否全部赋值:例如:
int a[5];
cout << sizeof(a);  //输出4,因为首元素为int型4字节
a[0] = 5;
cout << sizeof(a);  //输出20,因为此时已经初始化了,虽然只给了1个数据,但其大小已经是5×4
char b[5];
cout << sizeof(b);  //输出1
b[0] = 'a'; 
cout << sizeof(b);  //输出5
  • 二维数组和多维数组:二维数组相当于是一个矩阵,分为行和列,其定义与赋值同一维数组,例如:
int a[2][3];   //定义一个两行三列的“矩阵”
a[0][0] = 1;
a[0][1] = 2;
a[0][2] = 3;   //先给第一行赋值
//……再给第二行赋值
int b[2][3] = {1, 2, 3, 4, 5, 6}; //直接同时赋值
//int b[][] = {1, 2, 3, 4, 5, 6};   非法,会产生编译错误,因为编译系统不知道有多少行或多少列
//int c[2][] = {1, 2, 3, 4, 5, 6};  非法,因为已经给定了行,但列未给出
//int d[][3] = {1, 2, 3, 4, 5, 6};  非法,因为已经给定了列,但行未给出
//int e[][] = {{1, 2, 3}, {4, 5, 6}}; 非法
//还可以采用for或while循环赋值,只是这时需要使用两次:
int f[2][3];
for(int i = 0; i < 2; i++){   //控制行循环
    for(int j = 0; j < 3; j++){ //控制列循环
        f[i][j] = i + j;  //赋值
    }
}

同样地,输出也可以采用同样地方法。下面就可以利用二维数组来输出一些矩阵了,例如:请写一个程序要求设置一个矩阵,要求交换其行和列地位置,代码如下:

#include <iostream>
using namespace std;
int main(){
    int array[4][4];
    for(int i = 0; i < 4; i++)  //采用for循环给4×4矩阵赋值
        for(int j = 0; j < 4; j++)
            array[i][j] = i * j + j;
    for(int i = 0; i < 4; i++){
        for(int j = 0; j < 4; j++)
            cout << array[i][j] << "\t"; //输出,每个数之间加一个tab
        cout << endl;   //每行之间换一行,看起来比较舒服
    }
    int flag;   //设置一个中间变量用以交换
    for(int i = 0; i < 4; i++){
        for(int j = 0; j < i; j++){  //控制循环,列小于行即可,避免再次交换回来
            flag = array[i][j];
            array[i][j] = array[j][i];
            array[j][i] = flag;   //交换
        }
    }
    cout << "----------交换后----------" <<endl;  //再次输出
        for(int i = 0; i < 4; i++){
        for(int j = 0; j < 4; j++)
            cout << array[i][j] << "\t";
        cout << endl;
    }
    return 0;
}

输出结果:

如有错误,欢迎大家批评与指正!

c++数组
2019-06-16 10:20:21 qq_27868061 阅读数 6
  • C++编程视频教程—C++入门开发视频教程

    C++语言是C语言的超集,它扩充和完善了C语言,由于C++面向对象、模板、高效、优秀、强大的语言特性、在程序员中备受青睐,成为近25年使用为广泛的编程语言。黄强老师专为毫无编程基础的新手小白量身打造的C++语言课程体系,结合通俗易懂的课程讲解与简洁的代码演练,能够让小白们高呼我听懂了!

    5807 人正在学习 去看看 黄强

c++中,数组可以储存多个同类型值

数组声明时必须指出:数组名、数组元素类型、数组长度,如:

 

int arr[10];

注意c++中[10] 必须跟在数组名之后,下面的声明时错误的:

 

 

int[10] arr;

 

其中数组长度必须在编译时确定,因为要分配内存,所以不能为变量,必须为以下之一:

常量:使用#define定义的整形常量

字面量:整型字面量

常量表达式:常量的计算值

const值:如const int a = 10;

变量是绝对不可以的,因为只有运行时才会获取变量值

 

 

 

C++的64位整型

阅读数 306

没有更多推荐了,返回首页