c指针作业(第一次)

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;
}

猜你喜欢

转载自www.cnblogs.com/zyqy/p/9443315.html