How to find size of array in C/C++ without using sizeof ?

原文網址,本文並不是完全翻譯,而是自己學習後的筆記

Introduction

當我們要算array長度時,我們可以使用sizeof,請參考以下代碼:

int size = sizeof(arr)/sizeof(arr[0]);

Problem

有沒有方法讓我們再不用sizeof的情況下找到陣列長度

Fundamental

int arr[] = {1,2,3};
printf("array=%p : &array=%p\n", arr, &arr);

這段代碼,雖然印出的結果是相同的,但是其實arr和&arr是不同的概念:
1. arr的原文解釋pointer to the first element of array
2. &arr原文解釋pointer to whole array of 3 int


int arr[] = {1,2,3};    
printf("array+1 = %p : &array + 1 = %p", array+1, &array+1);

這段代碼,印出的結果可能會讓你有點驚訝,但是應用剛剛的觀念去想應該還可以
1. arr+1則是第二個元素的位址,所以和arr會相差4byte(假設sizeof(int)=4)
2. &arr+1則是把整個陣列視為一個元素,則一個元素有4*3=12byte(假設sizeof(int)=4),&arr+1則會和arr相差12byte

solution1

應用剛剛的觀念去定義一個macro,以下這個macro的好處是不用在乎變數的型態

#include <iostream>
using namespace std;

// User defined sizeof macro
# define my_sizeof(type) ((char *)(&type+1)-(char*)(&type))

int main()
{
    int  arr[] = {1, 2, 3, 4, 5, 6};
    int size = my_sizeof(arr)/my_sizeof(arr[0]);

    cout << "Number of elements in arr[] is "
         << size;

    return 0;
}

solution2

#include <iostream>
using namespace std;

int main()
{
    int  arr[] = {1, 2, 3, 4, 5, 6};
    int size = *(&arr + 1) - arr;
    cout << "Number of elements in arr[] is "
         << size;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值