1. 程式人生 > >c指針作業(第一次)

c指針作業(第一次)

是什麽 array main 根據 使用 預算 高效率 一起 長度

1. 數據類型的本質是什麽? (從編譯器的角度考慮)

數據類型可理解為創建變量的模具:是固定內存大小的別名
數據類型的作用:編譯器預算對象(變量)分配的內存空間大小
註意:數據類型只是模具,編譯器並沒有分配空間,只有根據類型(模具)
創建變量(實物),編譯器才回分配空間。

2. 如何為一個數據類型起別名?
通過 typedef 給數據類型起別名
typedef 經常和結構體一起使用

3. 既然有棧空間,為何要有堆空間?
棧的空間由誰分配和回收?
堆的空間又由誰分配和回收?

棧空間能自動釋放空間,提高效率,由系統分配和回收空間
堆可以在任意分配空間,更加靈活,由程序員分配和回收空間

4. 有一個函數,數組做函數函數
void print_array(int a[128])
{
//sizeof(a) = ?
}
數組作為形參,會退化成指針
因此sizeof(a)=4

5. 有一個數組,如何求出元素個數?
int main(void)
{
int a[] = {1, 5, 7, 0, 10, 7, 3};

}
使用
sizeof(a)/sizeof(a[0]);

6. 在32位平臺上
char ************p = NULL;
int *q = NULL;
sizeof(p) = ?
sizeof(q) = ?

指針類型長度,32位程序,長度 4
64位程序,長度 8

7. 畫出下面代碼的內存四區圖
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *get_mem(int size)
{
char *p2 = NULL; //分配4個字節的內存 棧區也叫臨時區
p2 = (char *)malloc(size);

return p2;
}

int main(void)
{
char buf[100];
int a = 10; //分配4個字節的內存 棧區也叫臨時區
int *p; //分配4個字節的內存
p = &a;

*p = 20;

char *mp = get_mem(100);
strcpy(mp, "ABCDEFG");

if (mp != NULL)
{
free(mp);
mp = NULL;
}

return 0;
}

c指針作業(第一次)