日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

【C语言进阶深度学习记录】三十一 数组作为函数参数时退化为指针

發布時間:2023/12/10 pytorch 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C语言进阶深度学习记录】三十一 数组作为函数参数时退化为指针 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前的學習數組的文章中,已經知道一維數組作為函數參數的時候,最終會被編譯器編譯為指針。今天來看看二維數組的情形

文章目錄

    • 1 為什么C語言中的數組作為函數參數會退化為指針?
    • 2 二維數組作為函數參數如何退化
      • 2.1 代碼案例分析(傳遞二維數組給函數參數)
    • 3 總結

1 為什么C語言中的數組作為函數參數會退化為指針?

C語言是一種高效的語言:

  • 當參數傳遞的時候如果將整個數組都拷貝過來的話,拷貝數組的過程會非常的低效,開銷比較大
  • 如果數組過大,參數位于棧上,很容易導致棧溢出
  • 2 二維數組作為函數參數如何退化

    二維數組可以看做是一維數組,該一維數組存的元素是另一個一維數組。

    二維數組中第一維的參數可以省略。如下圖所示:

    • 下圖中是不同的數組類型作為函數參數的時候,會被編譯器編譯成的樣式:

    注意區分:指針數組與二維數組退化后的不同形式。

    同時我們需要非常注意以下幾點:

    • C語言中無法向一個函數傳遞任意的多維數組(所以說不是所有的數組維度都能作為函數參數)

    • 必須提供除第一維之外的所有維長度

    • 第一維之外的所有維度信息用于完成指針運算
    • N維數組的本質是一維數組,元素是N-1維的數組
    • 對于多維數組的函數參數,第一維的元素個數必須以函數參數的形式傳給函數,否則在函數體內無法得到整個函數

    2.1 代碼案例分析(傳遞二維數組給函數參數)

    • 代碼:35-1.c
    #include <stdio.h>void access2d(int a[][3], int row){ int col = sizeof(*a)/sizeof(int); //int a[][3] ==> int(*a)[3],a是指針,指向類型為int[3]的數組int i=0,j=0; //所以sizeof(*a) 的大小是3*4=12;printf("sizeof(a) = %d\n",sizeof(a)); //4printf("sizeof(*a) = %d\n",sizeof(*a)); //12for(i=0; i<row; i++){for(j=0; j<col; j++){printf("%d ",a[i][j]);}printf("\n");}printf("\n"); }void access3d(int a[][2][3], int n){int i=0,j=0,k=0;printf("sizeof(a) = %d\n",sizeof(a)); //4printf("sizeof(*a) = %d\n",sizeof(*a));//24,int a[][2][3]==>int(*a)[2][3] a指向int[2][3]的數組for(i=0; i<n; i++){for(j=0; j<2; j++){for(k=0; k<3; k++){printf("%d ",a[i][j][k]);}}printf("\n");}printf("\n"); } int main(){int a[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};int b[1][2][3] = {0};access2d(a, 3);access3d(b, 1);return 0; }
    • 編譯運行結果為:

    3 總結

    注意,C語言中只會以值拷貝的方式傳遞函數參數,所以如果想要修改某一個內存中的內容,就必須向函數傳遞該內容所在內存的地址。

    • 多維數組作為函數參數的時候,必須傳遞除了第一維之外的所有維的大小信息。
    • 最終多維數組在函數中被編譯器編譯為指針。
    • 一定要牢記各個數組類型最終退化為什么樣的指針。參考本中的圖表

    總結

    以上是生活随笔為你收集整理的【C语言进阶深度学习记录】三十一 数组作为函数参数时退化为指针的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。