亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在函數中查找數組長度

在函數中查找數組長度

C
冉冉說 2019-07-09 15:36:27
在函數中查找數組長度在數組長度以下的程序中ar主要是正確的,但在temp它顯示指向ar在我的電腦上是2(單位:sizeof(int)).#include <stdio.h>void temp(int ar[]) // this could also be declared as `int *ar`{     printf("%d\n", (int) sizeof(ar)/sizeof(int));}int main(void){     int ar[]={1,2,3};     printf("%d\n", (int) sizeof(ar)/sizeof(int));     temp(ar);     return 0;}我想知道如何定義函數,以便在函數中正確讀取數組的長度。
查看完整描述

3 回答

?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

沒有“內置”方式來確定函數中的長度。不管你怎么通過arrsizeof(arr)將始終返回指針大小。因此,最好的方法是將元素數作為單獨的參數傳遞?;蛘?,您可以有一個特殊的值,例如0-1表示結束(就像它是這樣的)。\0在字符串中,它們只是char [])。但當然,“邏輯”數組的大小是sizeof(arr)/sizeof(int) - 1


查看完整回答
反對 回復 2019-07-09
?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

正如其他人所說,顯而易見的解決方案是將數組的長度作為參數傳遞,還可以在數組的開頭存儲此值。

#include <stdio.h>void temp(int *ar){
    printf("%d\n", ar[-1]);}int main(void){
    int ar[]= {0, 1, 2, 3};
    ar[0] = sizeof(ar) / sizeof(ar[0]) - 1;
    printf("%d\n", ar[0]);
    temp(ar + 1);
    return 0;}


查看完整回答
反對 回復 2019-07-09
?
茅侃侃

TA貢獻1842條經驗 獲得超22個贊

不要使用函數,請為此使用宏:

//Adapted from K&R, p.135 of edition 2.#define arrayLength(array) (sizeof((array))/sizeof((array)[0]))int main(void){
    int ar[]={1,2,3};
    printf("%d\n", arrayLength(ar));
    return 0;}

您仍然不能在像您這樣的函數中使用此宏。temp因為其他人提到的原因,數組作為參數傳遞。

如果您想傳遞一個數據類型,可以選擇定義一個同時具有數組和容量的類型:

typedef struct{
  int *values;
  int capacity;} intArray;void temp(intArray array){
  printf("%d\n", array.capacity);}int main(void){
    int ar[]= {1, 2, 3};
    intArray arr;
    arr.values = ar;
    arr.capacity = arrayLength(ar);
    temp(arr);
    return 0;}

這需要更長的時間來設置,但是如果您發現自己將它傳遞給許多函數,則非常有用。


查看完整回答
反對 回復 2019-07-09
  • 3 回答
  • 0 關注
  • 542 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號