一 指针
内存地址是线性的,线性地址
地址就相当于是房间的门牌号
每个地址对应一个字节的空间。数据存放在地址标识的空间里。
变量和常量
int var_a;
char var_b;
数据类型
什么是数据类型?
怎么去访问一个变量的内容?
每个变量都有自己的名字和名字对应的变量的地址,在这个地址空间里有变量的值。
首先通过变量的名字找到变量的地址,然后访问变量的内容(变量的值),访问变量的内容的时候,要遵循一定的访问方式。数据类型决定了你怎么访问这块内存空间。
数据类型就是内存的访问方式。
指针是类型,不是地址。
int char * double float short。。。
int var_a;
char var_b;
int *p;
举例验证指针的概念
代码参见point_base.c
大端和小端
高字节放在低地址,称为大端
高字节放在高地址,称为小端
编写代码验证计算机采用的是大端还是小端
代码参见big_little.c
数组:
int arr[3];
int *p=arr; p+1;
char arr[3];
举例验证
代码参加point_arr.c
二维数组的内存空间分布
int arr[2][3]={{1,2,3},{4,5,6}};
举例验证二维数组和指针的使用
point_two_arr.c
指针数组(指针类型的数组)
int *arr[3];
数组指针
int (*arr)[3];
指针和函数
int *func(int x,int y);
int (*func)(int x,int y);
func是指针类型的变量
int(int x,int y);是访问方式
int add(int,int);
int sub(int,int);
func=add;
func=sub;
举例验证 函数指针
代码参见tmath文件夹
int (*t[4])(int,int);
指针小结:
int p;
int *p;
int **p;
int *p[3];
int (*p)[3];
int *func(int,int);
int (*func)(int,int);
int (*func[4])(int,int);
(1) 常量和变量
(2) 通过变量的名字找到变量的地址,然后根据变量的类型访问变量的空间内容
(3) 运算符的优先级及其结合性。
二 类型别名的定义
typedef
typedef int COUNT;
COUNT c;
使用typedef的三歩曲
第一步:
int count_t; count_t是整型类型的变量
第二步:
typedef int count_t; count_t 是int类型的别名
第三步:使用类型的别名声明和定义变量
count_t c; 变量c的本质类型是int。
struct stu{
int num;
char name[12];
};
typedef struct stu stu_t;
stu_t st; st是struct stu类型的一个变量
typedef stu_t *stu_p;
stu_p 是什么类型的别名?
stu_p是指针类型的别名。访问指针变量里的内容的内容的时候,遵循stu_t类型的访问方式。
stu_p st;======stu_t *st;
stu_p st1,st2,st3;=====stu_t *st1,*st2,*st3;
stu_p *sp;
int(*func_t)(int,int);
typedef int(*func_t)(int,int);
func_t tm;
int arr_t[3];
typedef int arr_t[3];
arr_t a={1,2,3};
arr_t b[2];
int arr[2][3];
举例验证
typedef_arr.c
三 环境变量
四 静态库的制作
小结:
一、指针
二、使用typedef为类型定义别名
内存地址是线性的,线性地址
地址就相当于是房间的门牌号
每个地址对应一个字节的空间。数据存放在地址标识的空间里。
变量和常量
int var_a;
char var_b;
数据类型
什么是数据类型?
怎么去访问一个变量的内容?
每个变量都有自己的名字和名字对应的变量的地址,在这个地址空间里有变量的值。
首先通过变量的名字找到变量的地址,然后访问变量的内容(变量的值),访问变量的内容的时候,要遵循一定的访问方式。数据类型决定了你怎么访问这块内存空间。
数据类型就是内存的访问方式。
指针是类型,不是地址。
int char * double float short。。。
int var_a;
char var_b;
int *p;
举例验证指针的概念
代码参见point_base.c
大端和小端
高字节放在低地址,称为大端
高字节放在高地址,称为小端
编写代码验证计算机采用的是大端还是小端
代码参见big_little.c
数组:
int arr[3];
int *p=arr; p+1;
char arr[3];
举例验证
代码参加point_arr.c
二维数组的内存空间分布
int arr[2][3]={{1,2,3},{4,5,6}};
举例验证二维数组和指针的使用
point_two_arr.c
指针数组(指针类型的数组)
int *arr[3];
数组指针
int (*arr)[3];
指针和函数
int *func(int x,int y);
int (*func)(int x,int y);
func是指针类型的变量
int(int x,int y);是访问方式
int add(int,int);
int sub(int,int);
func=add;
func=sub;
举例验证 函数指针
代码参见tmath文件夹
int (*t[4])(int,int);
指针小结:
int p;
int *p;
int **p;
int *p[3];
int (*p)[3];
int *func(int,int);
int (*func)(int,int);
int (*func[4])(int,int);
(1) 常量和变量
(2) 通过变量的名字找到变量的地址,然后根据变量的类型访问变量的空间内容
(3) 运算符的优先级及其结合性。
二 类型别名的定义
typedef
typedef int COUNT;
COUNT c;
使用typedef的三歩曲
第一步:
int count_t; count_t是整型类型的变量
第二步:
typedef int count_t; count_t 是int类型的别名
第三步:使用类型的别名声明和定义变量
count_t c; 变量c的本质类型是int。
struct stu{
int num;
char name[12];
};
typedef struct stu stu_t;
stu_t st; st是struct stu类型的一个变量
typedef stu_t *stu_p;
stu_p 是什么类型的别名?
stu_p是指针类型的别名。访问指针变量里的内容的内容的时候,遵循stu_t类型的访问方式。
stu_p st;======stu_t *st;
stu_p st1,st2,st3;=====stu_t *st1,*st2,*st3;
stu_p *sp;
int(*func_t)(int,int);
typedef int(*func_t)(int,int);
func_t tm;
int arr_t[3];
typedef int arr_t[3];
arr_t a={1,2,3};
arr_t b[2];
int arr[2][3];
举例验证
typedef_arr.c
三 环境变量
四 静态库的制作
小结:
一、指针
二、使用typedef为类型定义别名