博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++ 在函数中传递数组和sizeof用法注意事项
阅读量:5889 次
发布时间:2019-06-19

本文共 1018 字,大约阅读时间需要 3 分钟。

hot3.png

通常,指向数组第一个元素的指针会传入函数,同时还需传入数组的大小(后面会详细解释)

void by_pointer(int *p, int size); void by_pointer(int p[], int size); void by_pointer(int p[7], int size); // the 7 is ignored in this context!

注意如果按照下面的方式打印数组

void printArray(int data[]) { for(int i = 0, length = sizeof(data); i < length; ++i) { std::cout << data[i] << ' '; } std::cout << std::endl; }

你会发现数组中只有前面的四个元素被打印,这是因为sizeof(data)返回的实际是指针的大小4. 原因是在这个过程中,数组没有被复制,被复制的是指向数组第一个元素的指针。

有一个公式num_elements = sizeof( array ) / sizeof( array[0] )可以计算出数组中元素的个数, 但是使用的时候也是有陷阱的 #include <iostream> using std::cout;

int a[] = { 1, 2, 3, 4, 5 };

int counta() { return sizeof( a ) / sizeof( a[ 0 ] ); // works, since a[] is an array }

int countb( int b[] ) { return sizeof( b ) / sizeof( b[ 0 ] ); // fails, since b[] is a pointer }

int main() { cout << "The size of a is " << counta() << endl; cout << "The size of b is " << countb( a ) << endl; }

在 counta(), 编译器知道全局变量a的类型,包括它的大小

In countb(), 编译器其实把参数b[]看成指针*b,它并不知道指针b所指向的数组的大小

转载于:https://my.oschina.net/zshuangyan/blog/126566

你可能感兴趣的文章
lnmp环境搭建
查看>>
自定义session扫描器精确控制session销毁时间--学习笔记
查看>>
【转】EDK简单使用流程(3)
查看>>
Ubuntu中无法update的解决办法
查看>>
仿射变换
查看>>
decltype类型指示符
查看>>
虹软ArcFace人脸识别 与 Dlib 人脸识别对比
查看>>
laravel 验证码使用示例
查看>>
IE开发人员工具无法使用
查看>>
分页器(自定制)
查看>>
HDU1877 又一版 A+B
查看>>
往sde中导入要素类报错000732
查看>>
springboot之启动方式
查看>>
初次安装git配置用户名和邮箱及密钥
查看>>
6.1(续)索引、索引组织表--Oracle模式对象
查看>>
动画 球
查看>>
C++中的堆,栈,静态内存区,常量区
查看>>
动态SQL实现与注意事项(有返回值与无返回值动态SQL 实现)
查看>>
java struts2 debug
查看>>
简单够用的设计
查看>>