#include <stdio.h>
int main(void)
{
double * p;
double x = 66.6;
p = &x; //x占八个字节 一个字节是八位 一个字节一个地址
double arr[3] = {1.1,2.2,3.3};
double *q;
q = &arr[0];
printf("%p\n", q); //%p实际就是以十六进制输出
q= &arr[1];
printf("%p\n", q);
return 0;
}
结构体
- 为什么会出现结构体
为了表示一些复杂的数据,而普通的基本数据类型无法满足要求 - 什么叫结构体
结构体是用户根据实际需要自己定义的复合数据类型 - 如何使用结构体
struct Student st = {1000, "zhangsan", 20};
struct Student * pst = &st;
st.sid
pst->sid //pst所指向的结构体变量中的sid这个成员
- 注意事项
结构体变量不可以加减乘除,但可以相互赋值
普通结构体变量和结构体指针变量作为函数传参的问题
动态内存的分配和释放
#include <stdio.h>
#include <malloc.h>
int main(void)
{
int a[5] = {4,10,2,8,6};
int len;
printf("请输入你需要分配的数组的长度:len =");
scanf("%d", &len);
int * pArr = (int *)malloc(sizeof(int) * len);
*pArr = 4; //类似于 a[0] =4
pArr[1] = 10; //类似于 a[1] = 10
printf("%d%d\n",*pArr, pArr[1]);
//我们可以把pArr当作一个普通数组来使用
for(int i=0; i<len; ++i)
scanf("%d",&pArr[i]);
for(int j=0; j<len; ++j)
printf("%d\n", *(pArr+j));
free(pArr); //把pArr所代表的动态分配的20个字节的内存释放
return 0;
}
跨函数使用内存
- malloc()动态分配的内存如果不用free()释放就会一直占用直到程序结束
A *pa = (A *)malloc(sizeof(A) ); //C
A aa = new A(); //Java
- 动态内存举例
#include <stdio.h>
#include <malloc.h>
struct Student
{
int sid;
int age;
};
struct Student * CreateStudent(void);
void ShowStudent(struct Student *);
int main(void)
{
struct Student *ps;
ps = CreateStudent();
ShowStudent(ps);
return 0;
}
struct Student * CreateStudent(void)
{
struct Student * p = (struct Student *)malloc( sizeof(struct Student) );
p->sid = 99;
p->age = 88;
return p;
}
void ShowStudent(struct Student *pst)
{
printf("%d %d\n", pst->sid, pst->age);
}
2020/04/05