今天在写C++作业的时候,发现自己脑子有点小傻。。。 :sleeping:
#include <iostream>
using namespace std;
void sum(int a[][2],int n,int b[])
{
int i,num;
num=sizeof(a);
cout << num << endl;
}
int aaa;
int test[5][2],test2[2];
int main()
{
sum(test,5,test2);
aaa=sizeof(test);
cout << aaa << endl;
}
两个坑
- 第一个坑,开始只是想在子函数里面求出二维数组的大小,结果跑出来的结果是4,一脸懵逼的还想着为什么跑出8。。。
- 第二个坑,主函数跑出来的代码是40。。。
第一个坑
关于第一个坑,其实是数组作为形参的时候是作为指针常量的,然后在64位环境下,指针的大小是8个字节的,所以对指针sizeof
的话结果是8
如果我将devc++这里的环境改一下,改成32位
那么结果就是4
第二个坑
主函数跑出来是40。。。
那肯定是40啊。。。。
十个元素,十个int
,那不就是40。。。
求二维数组的行数跟列数
将主函数改成这样,就可以求出行数
int main()
{
sum(test,5,test2);
aaa=sizeof(test)/2/sizeof(int);
cout << aaa << endl;
}
同理,如果求列数的话
int aaa;
int test[5][2],test2[2];
int main()
{
sum(test,5,test2);
aaa=sizeof(test)/5/sizeof(int);
cout << aaa << endl;
}
FEATURED TAGS
Ubuntu
markdown
stm32
OSDK
飞控
串口
Jscope
C
C++
bin
J-Flash
字符串
指针数组
malloc
vscode
svg
png
github
python
CMake
CMakeLists
Linux
拷贝构造函数
GIF
录屏
docker
操作系统
make
Makefile
文件操作
DSP
CCS
SQL
MySQL
shell
bochs
计算机网络
win10
SMTP
Socket
iOS
uxplay
投屏
证书错误
apt
nodesource
ELF
Typora
图床
fossil
sql
git
SecureCRT
windows
cygwin
blog
alsa
alsa-utils
alsa-lib
音频
USB
链接文件
内存
mmap
tcpdump
交叉编译
网络
防火墙
crontab
bond
Linux性能
udev
linux
pcie
wsl2
MMIO
wsl
qemu
raspi4
gdb
ssh
tun
tap
ifconfig
打印
gmac
phy
vim
组播
rock3a
win11
usb
sd
ubuntu
iptables
netfilter
wifi
veth
ipv6
wireshark
radvd
dhcpv6
dhcpv4
网络命名空间
br虚拟网卡
NDP
emmc
存储
raspi4b
baremental
jtag
buildroot
rootfs
ext4
调试
uboot
dropbear
raspi
ebpf
uart
baremetal
kernel
bringup
libbpf