怎样知道指针所指数组的元素个数

漫步惊星 2017-12-05 10:54:24
/*
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
*/

#include <iostream>
#include <cstdlib>

using namespace std;

void Fcn(int arr[], int m){
int n = sizeof(arr) / sizeof(int);
cout << "size: " << n << endl; //此处输出为1,不符合本来的意图
//插入排序
for (int i = 1; i < n; ++i){
for (int j = i; j > 0; --j){
if (arr[j] < arr[j - 1])
swap(arr[j], arr[j - 1]);
else
break;
}
}

//遍历数组找出与m相等的元素
int flag = 0;
for (int i = 0; i < n; ++i){
if (arr[i] == m){
flag = 1;
cout << "Include" << endl;
break;
}
}
if (flag == 0)
cout << "Not Include" << endl;
}

int main()
{
int arr[] = { 1, 2, 1, 6, 3, 1, 8 };
Fcn(arr, 6);

system("pause");
return 0;
}


谢谢大家点进来,在十一行代码中本意是希望n得到数组中元素的个数,但结果是得到4/4 =1,所以想问问大家有什么办法得到数组的元素个数?
另外
short a[100];
int n = sizeof(a);

得到的是整个数组的大小,为什么传入个数组指针后就结果不一样了呢?
求教!
...全文
932 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saleayas 2017-12-06
  • 打赏
  • 举报
回复
多传一个参数,数组的长度。 很多函数在使用数组的时候,不仅有长度,还有起始位置。
weixin_38305120 2017-12-06
  • 打赏
  • 举报
回复
其实我有个奇葩的方法,你把指针扔到内存视图里,然后地址-16,里面-12开始的地方会出现数组的长度,目前遇到都好像是这样的
  • 打赏
  • 举报
回复
引用 2 楼 weixin_38305120 的回复:
其实我有个奇葩的方法,你把指针扔到内存视图里,然后地址-16,里面-12开始的地方会出现数组的长度,目前遇到都好像是这样的
不算奇葩,这个好像和编译器的实现相关 不过这么做就很难实现了,印象中至少vc下面debug和release版本这个偏移量都不一样
jena_wy 2017-12-06
  • 打赏
  • 举报
回复
一般都是多传一个参数表示数组的长度。
湿乎乎 2017-12-06
  • 打赏
  • 举报
回复
C++ Primer第6.2.4节:【数组形参】有详细讲解 1,对于C风格字符串,最后一个字符后跟着一个空字符,本身就包含一个结束标记。 2,使用数组的首元素指针和尾后元素指针,通过begin()和end()函数得到。 3,显式传递一个表示数组大小的形参。
JadenNeal 2017-12-06
  • 打赏
  • 举报
回复
用循环把指针指向数组的末尾,然后再把这个指针和数组名(也就是数组第一个元素地址值)相减,得到的就是属数组元素的个数。
xskxzr 2017-12-05
  • 打赏
  • 举报
回复
不可能的。数组作形参会退化成指针。而一旦数组退化成指针,其元素个数信息也丢失了。

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧