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

歡迎訪問 生活随笔!

生活随笔

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

pytorch

【C语言进阶深度学习记录】二十三 数组的本质分析

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

文章目錄

    • 1 數組的概念
      • 1.1 數組的大小
      • 1.2 數組的初始化
    • 2 數組的地址與數組名
    • 3 數組名不能作為左值使用
    • 4 總結

1 數組的概念

  • 數組是相同類型的變量的有序集合
  • 數組中的元素沒有名字

如下圖是一個數組:

1.1 數組的大小

  • 數組的大小是數組元素個數乘以元素的數據類型
  • 數組在一片連續的內存空間中存儲元素
  • 數組元素的個數可以顯示或者隱式的指定

那么數組a[0]=1,a[1]=2,a[2]=0,a[3]=0,a[4]=0

數組b的元素個數是2,b[0]=1,b[1]=2.

sizeof(a) = 20,sizeof(b)=8

數組的元素的個數可以使用下面的公式求解:

cnt = sizeof(array)/sizeof(type)

想要將數組全部初始化為0,直接寫:

int a[5] = {0};

1.2 數組的初始化

如下代碼27-1.c:

#include <stdio.h>int main() {int a[5] = {1, 2};int b[] = {1, 2};printf("a[2] = %d\n", a[2]);printf("a[3] = %d\n", a[3]);printf("a[4] = %d\n", a[4]);printf("sizeof(a) = %d\n", sizeof(a));printf("sizeof(b) = %d\n", sizeof(b));printf("count for a: %d\n", sizeof(a)/sizeof(int));printf("count for b: %d\n", sizeof(b)/sizeof(int));return 0; }
  • 編譯運行結果為:

2 數組的地址與數組名

  • 數組名代表數組首元素的地址,但是如果想要獲取數組的地址,還是需要加上&地址獲取符。如&a是數組a的地址。這里有一點不能繞暈了,如果a是數組,那么a的值與&a的值是相等的。這與普通變量是不一樣的。
  • 整個數組的地址值等于數組第一個元素的地址,它們在數值上相等,但是意義不一樣。

如下代碼27-2.c:

#include <stdio.h>int main() {int a[5] = { 0 };printf("a = %p\n", a);printf("&a = %p\n", &a);printf("&a[0] = %p\n", &a[0]);return 0; }

運行結果如下:

注意:

  • 如果想獲取整個數組的地址,只能這樣獲取:int* p =&a 。那么p就是數組的地址,p+1就是數組最后一個元素的下一個地址。

  • 但是如果直接用int *p = a, p+1就是數組的第二個元素的地址。對于&a[0]也是一樣的

為什么會不同的呢?實際上可以這么理解:

  • 數組名a只是代表數組首元素的地址值,它不包含數組的長度信息,所以a+1就直接相當于數組的第二個元素的地址
  • 而&a代表整個數組的地址,它包含了數組的長度信息,所以在&a + 1時,相當于直接越過了整個數組的長度,調到數組的末尾的下一個元素的地址。
  • 3 數組名不能作為左值使用

    • 數組與指針是不同的。

    這個話題,會在后面有專門的兩篇文章學習。所以這里只是簡單說一點:

  • 在表達式中,數組名只能作為右值使用,不能作為左值使用
  • #include <stdio.h>int main() {int a[5] = {0};int b[2];int* p = NULL;p = a;printf("a = %p\n", a);printf("p = %p\n", p);printf("&p = %p\n", &p);printf("sizeof(a) = %d\n", sizeof(a));printf("sizeof(p) = %d\n", sizeof(p));printf("\n");p = b;printf("b = %p\n", b);printf("p = %p\n", p);printf("&p = %p\n", &p);printf("sizeof(b) = %d\n", sizeof(b));printf("sizeof(p) = %d\n", sizeof(p));b = a;return 0; }

    上述代碼編譯會出錯:

    將第27行注釋掉,就可以編譯運行:

    這說明,在表達式中,數組名不能作為左值使用

    4 總結

    • 數組是一片連續的內存空間
    • 數組的地址數組首元素的地址 意義不同
    • 數組名不能作為左值使用

    總結

    以上是生活随笔為你收集整理的【C语言进阶深度学习记录】二十三 数组的本质分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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