C/C++中如何获取数组的长度
在C语言中习惯上在
使用时都把它定义成一个宏,比如#define
GET_ARRAY_LEN(array,len) {len = (sizeof(array) /
sizeof(array[0]));}。
而在C++中则可以使用模板技术定义一个函数,比如:
template <classTintgetArrayLen(T& array){return(sizeof(array) / sizeof(array[0]));}这样对于一些简单的数组可以使用这个宏或者这个函数来获取数组的长度了。
以下是两个Demo程序,一个C语言的,一个C++的:PS:若数组为存储字符串的字符数组,即以双引号括起来的字符串整体初始化的字符数组
例如:char a[]="abcdefg"或者char
a[]={"abcdefg"}
则所求得的长度为字符数组的长度,而不是对应的字符串的长度,要求字符串的长度还需要减一
原因为存储字符串的字符数组末尾有一个'\0'字符,需要去掉它。
方法:
使用sizeof(array) / sizeof(array[0]), 在C语言中习惯上,在使用时都把它定义成一个宏。
比如#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));} 。而在C++中则可以使用模板技术定义一个函数。
比如:template intgetArrayLen(T& array){return (sizeof(array) / sizeof(array[0]));}
这样对于不同类型的数 组都可以使用这个宏或者这个函数来获取数组的长度了。
基础语法
1、C语言数据类型
C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。
2、常量与变量
常量其值不可改变,符号常量名通常用大写。
变量是以某标识符为名字,其值可以改变的量。标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。变量在编译时为其分配相应存储单元。
1. 算术表达式:
#include <iostream>
int main() {
int arr[4];
std::cout << sizeof( arr ) / sizeof( arr[0] ) << std::endl; // 输出4
}
或者
#include <iostream>
int main() {
int arr[4];
std::cout << sizeof( arr ) / sizeof( *arr ) << std::endl; // 输出4
}
2. 函数模板参数自动推断:
#include <iostream>
template <typename T, size_t N>
inline size_t Count( T ( & arr )[N] ) {
return N;
}
int main() {
int arr[4];
std::cout << Count( arr ) << std::endl; // 输出4
}
3.标准C++模板库:
#include <type_traits> // 注意包含此头文件.
#include <iostream>
int main() {
int arr[4];
std::cout << std::extent<decltype( arr ), 0>::value << std::endl; // 输出4
}
4.模板特化与自动类型推断:
include <iostream>
template <typename T>
class ComputeSize;
template <typename T, size_t N>
class ComputeSize<T[N]> {
public:
static const size_t value = N;
};
int main() {
int arr[4];
std::cout << ComputeSize<decltype( arr )>::value << std::endl; // 输出4
}
5. Visual C++编译器预定义宏:
#include <cstdlib>
#include <iostream>
int main() {
int arr[4];
std::cout << _countof( arr ) << std::endl; // 输出4.
}
6. boost库:
#include "boost/range.hpp"
#include <iostream>
int main(){
int arr[4];
std::cout << boost::size( arr ) << std::endl; // 输出4
}
上面的方法适用于静态数组,动态的数组(new[])是无法获取元素个数的。
上面的代码,自己可以编译运行看看,如果手上没有编译器测试上面的代码或者编译失败,可以在下面的页面上编译运行(最新版本的Visual C++):
http://webcompiler.cloudapp.net/
方法:
使用sizeof(array) / sizeof(array[0]), 在C语言中习惯上,在使用时都把它定义成一个宏。
比如#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));} 。而在C++中则可以使用模板技术定义一个函数。
比如:template <class T>intgetArrayLen(T& array){return (sizeof(array) / sizeof(array[0]));}
这样对于不同类型的数 组都可以使用这个宏或者这个函数来获取数组的长度了。
#include“string.h”
strlen(a)求字符数组的大小是
sizeof(a)/sizeof(a[0]);这种基本上万能
就是sizeof(数组对象)就可以啊,我这里可以
C++如何读入一个文件中的结构体数组数据?
取决于文件中数据的存储方式。1 如果文件中存储的方式为二进制形式数据:需要使用fread(C语言风格)或ifsteam的read成员函数(C++风格。)从文件中读取结构体数据到对应的结构体指针上。如 struct test { int a;};struct test t;fread(&t, 1,sizeof(t), fp);或 file.read(&t, sizeof(t));2...
c++如何从键盘接收int a【】;数组
或者你可以在输入以后进行处理 ASCII 0的值是48.你可以用小写字母97-48=49这个差量来换算也可以。如果用int 的话。123456还有一种。不过相当不建议,还是说一下 scanf("%1d",&a[0]);scanf("%1d",&a[1]);这里是一d,也不是ld注意下 1d代表只取一位,后面的由后面取。可是这样的话。。。
c++数组问题 如何得到你想要的第几个数 比如把10个任意整数输入到一个...
include<iostream> using namespace std;int main(){ \/\/定义数组 int array[10];\/\/循环输入十个数 for(int i = 0;i<10;i++)cin>>array[i];\/\/输出第三个数,数组下标从0开始,0、1、2 cout<<array[2]<<endl;return 0;}
C++如何输出数组内容
可以取出数组元素,然后输出每个元素就可以了。比如一维数组a,可以用a[i]的方式取出第i个元素,i被称为元素的下标。如果是二维数组a,可以用a[i][j]的方式取出第i行的第j个元素。C语言的下标最小值为0,最大值为(数组规模-1)。以下是一维整型数组输出的样例代码:include <iostream>using name...
C++,如何提取数字的每一位
提取数字的每一位,可以使用取余和除法的组合来实现。代码如下:int ival;deque<int> numbers;cin >> ival;while(ival) { \/\/注意对 10 取余得到的是当前数字的最后一位 numbers.push_front(ival % 10);ival \/= 10;因为对10取余得到的是当前数字的最后一位,比如1234%10 的结果是4,所以记录...
C++中怎么接收字符数组?
下面的代码能正常运行,在文件result.txt中有0000.bmp,0001.bmp...等内容 include<iostream> include<fstream>\/* 文件流 *\/ using namespace std;int main(){ unsigned M=10000,N=9;\/* M为行数,N为列数 *\/ char** P=new char*[M];\/* 指向指针的指针 *\/ unsigned i,j,k,l,s=0;f...
c++如何从函数中返回数组的引用并且该数组包含10个str
在C++中,若要从函数中返回数组的引用且该数组包含10个字符串,可以采用智能指针或引用计数技术来避免内存泄漏问题。尽管静态分配和reinterpret_cast可解决数组返回问题,但这两种方法在内存管理上并不理想,可能导致内存回收问题。因此,推荐使用能将对象保留在栈上的机制。若题目未提及具体参数,实际应用中,...
取二维数组的长度
在C++语言中,我们可以通过数组名直接获取二维数组的长度。例如,对于一个二维数组aa[3][2],我们可以通过sizeof(aa)\/sizeof(aa[0])来获取其长度,这里的结果为3,即二维数组的第一维长度。同样地,对于二维数组aa[2][3],我们同样可以通过sizeof(aa)\/sizeof(aa[0])来获取其长度,这里的结果...
c++ 二维数组怎么获取行数
有以下两种方式:1、根据定义。二维数组必须在定义的时候,确定大小,所以实际上行数在定义的时候已经确定了。比如 int a[4][10]; 就是4行10列的,它的行数就是4。2、 动态计算。二维数组每行大小相同,所以用总大小除以每行的大小,就是行数了。同样 int a[4][10];表达式 sizeof(a)\/size...
c++获取字符串数组长度的问题
sizeof(procedureList)\/sizeof(string); 直接用这个运算式