how to get the length of a array?
11 次查看(过去 30 天)
显示 更早的评论
I know mxGetM and mxGetN can get the row and col,and its parameter is a array name or a pointer.
But,I know when a array name act as a function parameter, it will behave just a pointer. for exmaple,
#
include <iostream>
using namespace std ;
int GetM(int* array)
{
return sizeof(array)/sizeof(array[0]) ;
}
int main()
{
int a[3] = {1,2,3} ;
cout<<GetM(a)<<endl ;
}
in this example ,GetM(a) return 1,not 3.so,I want to know how to realize matlab function mxGetM or how to get the length of a array. thanks a lot!
0 个评论
采纳的回答
Walter Roberson
2014-1-5
Array names are pointers in C++.
Your GetM code is dividing the size of the pointer by the size of the first element of the array; as it is an array of int, sizeof() the first element would be sizeof(int) so the "1" is reflecting the integer truncated division of the size of a pointer by the size of an int.
To get the length of a C++ array in C++, make the array an object of a class that records the length when the object was created and makes the length available as a property of the class.
To use C++ to get the length of a MATLAB array, call the appropriate mx* routine. MATLAB arrays point to a descriptor of the array, including each of the dimensions, and including a pointer to the actual data block. This is not the way other C++ arrays are stored (unless they have been designed for compatibility with MATLAB.)
0 个评论
更多回答(1 个)
James Tursa
2014-1-5
Pass the length of the "array" as part of the argument list. You can't get this info by simply examining the "array" pointer itself as you are attempting. "a" is of type "array of 3 int's", but "array" is of type "pointer to int".
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 C Matrix API 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!