【C语言进阶深度学习记录】二十三 数组的本质分析
生活随笔
收集整理的這篇文章主要介紹了
【C语言进阶深度学习记录】二十三 数组的本质分析
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 1 數(shù)組的概念
- 1.1 數(shù)組的大小
- 1.2 數(shù)組的初始化
- 2 數(shù)組的地址與數(shù)組名
- 3 數(shù)組名不能作為左值使用
- 4 總結(jié)
1 數(shù)組的概念
- 數(shù)組是相同類型的變量的有序集合
- 數(shù)組中的元素沒有名字
如下圖是一個數(shù)組:
1.1 數(shù)組的大小
- 數(shù)組的大小是數(shù)組元素個數(shù)乘以元素的數(shù)據(jù)類型
- 數(shù)組在一片連續(xù)的內(nèi)存空間中存儲元素
- 數(shù)組元素的個數(shù)可以顯示或者隱式的指定
那么數(shù)組a[0]=1,a[1]=2,a[2]=0,a[3]=0,a[4]=0
數(shù)組b的元素個數(shù)是2,b[0]=1,b[1]=2.
sizeof(a) = 20,sizeof(b)=8數(shù)組的元素的個數(shù)可以使用下面的公式求解:
cnt = sizeof(array)/sizeof(type)想要將數(shù)組全部初始化為0,直接寫:
int a[5] = {0};1.2 數(shù)組的初始化
如下代碼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; }- 編譯運行結(jié)果為:
2 數(shù)組的地址與數(shù)組名
- 數(shù)組名代表數(shù)組首元素的地址,但是如果想要獲取數(shù)組的地址,還是需要加上&地址獲取符。如&a是數(shù)組a的地址。這里有一點不能繞暈了,如果a是數(shù)組,那么a的值與&a的值是相等的。這與普通變量是不一樣的。
- 整個數(shù)組的地址值等于數(shù)組第一個元素的地址,它們在數(shù)值上相等,但是意義不一樣。
如下代碼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; }運行結(jié)果如下:
注意:
-
如果想獲取整個數(shù)組的地址,只能這樣獲取:int* p =&a 。那么p就是數(shù)組的地址,p+1就是數(shù)組最后一個元素的下一個地址。
-
但是如果直接用int *p = a, p+1就是數(shù)組的第二個元素的地址。對于&a[0]也是一樣的
為什么會不同的呢?實際上可以這么理解:
3 數(shù)組名不能作為左值使用
- 數(shù)組與指針是不同的。
這個話題,會在后面有專門的兩篇文章學(xué)習(xí)。所以這里只是簡單說一點:
上述代碼編譯會出錯:
將第27行注釋掉,就可以編譯運行:
這說明,在表達式中,數(shù)組名不能作為左值使用
4 總結(jié)
- 數(shù)組是一片連續(xù)的內(nèi)存空間
- 數(shù)組的地址 和 數(shù)組首元素的地址 意義不同
- 數(shù)組名不能作為左值使用
總結(jié)
以上是生活随笔為你收集整理的【C语言进阶深度学习记录】二十三 数组的本质分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++中的空类,默认产生哪些类成员函数?
- 下一篇: Adblock 插件规则语法实现B 站动