day02

来源:互联网 发布:软件专利 实用新型 编辑:程序博客网 时间:2024/06/04 19:28
回忆昨天内容:
一、计算机框架
二、什么是操作系统,操作系统包含的内容。
三、什么是GNU?
四、计算机语言的发展史。
五、大型软件组织
今天内容:
一、C语言的指针
常量和变量
不管是常量还是变量在计算机里都占用内存空间。
常量占用的内存空间的值是不能被改变的。
变量占用的内存空间的值是可以改变的。
如何访问变量和常量内存空间里的值?
通过变量或常量的名字,找到他们所占内存空间的地址,然后根据其类型来访问这块内存空间里的值。
什么是数据类型?
数据类型就是访问内存的方式。比如:int  4   short  2
int   整型类型    4
short  短整型     2
char   字符型     1
*     指针类型    4
指针是数据类型。指针不是地址。
一个具体的地址属于指针类型。
指针原理的验证。代码参见  point.c
int p;
int *p;
int **p;
int *p[4];  指针数组
int (*p)[3];  数组指针
void *malloc(size_t size); 函数返回值的类型的是指针类型的。函数的返回值是一个地址。
void (*p)(int,int);   p是指针类型的变量。void(int,int)
void *(*p)(int,int);  void *(int,int)
void (*p[4])(int,int);
写代码验证二维数组的使用  代码参见two_arr.c
int arr[2][3];
arr 数组的名字,这个数组有两个元素,每个元素的类型是
int[3];
举例验证数组指针的使用
代码参见arr_point.c
举例验证指向函数的指针的使用。代码参见 tmath文件夹
C语言三句话
1、常量和变量
2、找到地址,根据数据类型访问地址空间里的值。
3、运算符的优先级及其结合性。
二、类型的别名
使用typedef为类型定义别名。
int count_t;
typedef int count_t;
count_t c;
定义类型的别名分三歩走。
1、首先使用类型定义一个变量。
比如:  int count_t;
2、在第一步的前边加上typedef关键字,原来的变量就是类型的别名,也可以称为新类型。
比如:typedef int count_t; count_t是新类型,是int类型的别名
3、使用新类型定义变量。
count_t c;  变量c是count_t类型的变量。也就是int类型的变量。
举例使用typedef定义类型的别名
char *string_t;
typedef char *string_t;
string_t t,s;=======char *t,*s;
面试题
#define STR_T char *;
STR_T t,s
char *t,s;
struct stu{
    struct stu *this;
    int num;
    struct stu *next;
};
typedef struct stu stu_t;
stu_t st;  struct stu
p=malloc(sizeof(struct stu));
p->this=p;
typedef stu_t *stu_p;
stu_p sp;
struct stu *sp;
int arr_t[3];   arr_t
typedef int arr_t[3];  arr_t
arr_t a;
代码验证  typedef.c
typedef int (*func_t)(int,int);
func_t a;
举例验证  函数指针类型的变量的使用
代码参见ntmath文件夹
补充:
有符号的整数在内存中是以补码的形式存放的。
计算机只做加法运算。
一个正数的补码就是这个数的原码。
115    0111,0011
       1000,1101
一个负数的补码,是这个数的绝对值的原码按位取反加1.
-115   1000,1101
115-115=115+(-115)=0
大端和小端
小端:低位字节存放在内存的低地址。高位字节存放在内存的高地址。
大端:低位字节存放在内存的高地址。高位字节存放在内存的低地址。
总结:
一、C语言的指针
int p;
int *p;
int **p;
int *p[3];
int (*p)[3]
void *malloc(size_t);
int (*p)(int,int);
int (*p[3])(int,int);
int *(*p)(int,int);
大端和小端
整数在内存中是以补码存放的
二 使用typedef为类型定义别名
1
2
3
作业:自己编写代码验证自己机器的主机字节序。是大端还是小端?