第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

在函數(shù)中查找數(shù)組長度

在函數(shù)中查找數(shù)組長度

C
冉冉說 2019-07-09 15:36:27
在函數(shù)中查找數(shù)組長度在數(shù)組長度以下的程序中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;}我想知道如何定義函數(shù),以便在函數(shù)中正確讀取數(shù)組的長度。
查看完整描述

3 回答

?
MMMHUHU

TA貢獻1834條經(jīng)驗 獲得超8個贊

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


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

TA貢獻1982條經(jīng)驗 獲得超2個贊

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

#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條經(jīng)驗 獲得超21個贊

不要使用函數(shù),請為此使用宏:

//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;}

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

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

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;}

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


查看完整回答
反對 回復 2019-07-09
  • 3 回答
  • 0 關(guān)注
  • 540 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號