程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言入門知識 >> C語言學習入門 (三) sizeof 函數、內存地址、數組

C語言學習入門 (三) sizeof 函數、內存地址、數組

編輯:C語言入門知識

sizeof可以用來計算一個變量或者一個常量、一種數據類型所占的內存字節數。

sizeof(10);

char c = 'a';

sizeof(c);

sizeof(float);

地址

1.計算機中的內存是以字節為單位的存儲空間。內存的每一個字節都有一個唯一的編號,這個編號就稱為地址。

凡存放在內存中的程序和數據都有一個地址,也就是說,一個函數也有自己的內存地址

2. 當定義一個變量時,系統就分配一個帶有唯一地址的存儲單元來存儲這個變量。比如:

char a = 'A';// A的ASCII值為65

int b[] = {66,33};

在16bit編譯器環境下,系統為a、b分別分配1個字節、2個字節的存儲單元。變量存儲單元的第一個字節的地址就是該變量的地址。

\

可以看出,變量a的地址是ffc3;變量b的地址是ffc1。內存中存儲的都是2進制數據

一維數組<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvcD4KPHA+Crao0uW1xNDOyr3OqqO6PHN0cm9uZz7A4NDNICDK/dfpw/tb1KrL2Lj2yv1dPC9zdHJvbmc+PC9wPgo8cD4KaW50IGFbNV07IDwvcD4KPHA+CmludCBbXSBhOyDV4tH50LTKx7TttcQgsrvNrNPaamF2YdC01Nqx5MG/w/vHsLrztrzQ0CAgx9K2qNLlyrHQ6NKq1ri2qNSqy9i49sr9PC9wPgo8cD4Ks/XKvLuvo7o8L3A+CjxwPgppbnQgYVsyXSA9IHs4LDEwfTs8L3A+CjxwPgrG5Mq1z+C1sdPao7o8L3A+CjxwPgppbnQgYVsyXTs8L3A+CjxwPgphWzBdID0gODs8L3A+CjxwPgphWzFdID0gMTA7PC9wPgo8cD4K1KrL2CYjMjA1NDA7wdCx7b/J0tTKx8r91+nL+dPQ1KrL2LXEs/UmIzIwNTQwO6Os0rK/ydLUysfHsMPmsr+31tSqy9i1xLP1JiMyMDU0MDs8L3A+CjxwPgppbnQgYVs0XSA9IHsyLDV9OyAg1eLR+b7NuLMmIzIwNTQwO7j4YVswXT0yO2FbMV09NTsgCiBhWzJdPWFbM109xKzIzyYjMjA1NDA7MDwvcD4KPHA+Cjxicj4KPC9wPgo8cD4KtbG2qNLlsqLWsb3Ts/XKvLuvyrEgv8nS1LK71ri2qNSqy9i49sr9PC9wPgo8cD4KaW50IGFbXSA9IHsyLDMsNX07PC9wPgo8cD4Kyv3X6bP1yry7r8qxtcS4syYjMjA1NDA7t73Kvda7xNzTw9Payv3X6bXEtqjS5aOstqjS5dauuvPWu8Tc0ru49tSqy9jSu7j21KrL2LXYuLMmIzIwNTQwOzwvcD4KPHA+CmludCBhWzNdOzwvcD4KPHA+CmEgPSB7MSwyLDN9Oy8vtO3O86GjIAog0vLOqiDK/dfpw/thILT6se2x5MG/tcS12Na3o6zKx7j2s6PBv6OsuPizo8G/uLMmIzIwNTQwO77NtO3ByzwvcD4KPHA+Cjxicj4KPC9wPgo8cD4KtbHK/dfp1/fOqsq1ss7KsaOs0vLOqrSrtd21xMrH0ru49rXY1rejrMv50tTQzrLOuMSx5KOsyrWyztKyu+G4xLHkPC9wPgo8cD4KPHN0cm9uZz62/s6syv3X6Twvc3Ryb25nPjwvcD4KPHA+Crao0uXQzsq9o7o8c3Ryb25nPsDg0M0gIMr91+nD+1vQ0Mr9XVvB0Mr9XTwvc3Ryb25nPjwvcD4KPHA+CmludCBhWzJdWzNdOy8vubIy0NAzwdCjrDa49tSqy9ijrAogvLQgwb249rD8uqzI/bj21KrL2LXE0rvOrMr91+k8L3A+CjxwPgo8YnI+CjwvcD4KPHA+CtTaxNq05tbQtcS05rSix+m/9qOswP3I52ludCBhWzJdWzJdPC9wPgo8aW1nIHNyYz0="/uploadfile/Collfiles/20141204/2014120408592174.png" width="400" height="150" alt="\">

(注意:a[0]、a[1]也是數組,是一維數組,而且a[0]、a[1]就是數組名,因此a[0]、a[1]就代表著這個一維數組的地址)

1> 數組a的地址是ffc1,數組a[0]的地址也是ffc1,即a = a[0];

2> 元素a[0][0]的地址是ffc1,所以數組a[0]的地址和元素a[0][0]的地址相同,即a[0] = &a[0][0];

3> 最終可以得出結論:a = a[0] = &a[0][0],以此類推,可以得出a[1] = &a[1][0]

printf("%p\n%p\n%p", a, a[0], &a[0][0]);

二維數組的初始化

* 按行進行初始化

int a[2][3] = { {2,2,3}, {3,4,5} };

* 按存儲順序進行初始化(先存放第1行,再存放第2行)

int a[2][3] = {2,2,3,3,4,5};

* 對部分元素進行初始化

int a[2][3] = { {2}, {3,4} };

int b[3][3] = { { }, { , ,2}, {1,2,3}};

* 如果只初始化了部分元素,可以省略行數,但是不可以省略列數

int a[][3] = {1,2,3,4,5,6};

int a[][3] = {{1,2,3}, {3,5}, {}};

為什麼不能只省略列數呢? 因為int a[2][]={1,2,3,4,5,6} 這樣無法確定元素在哪一行。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved