表示将体系分派的 50 个字节的第一个字节的地址转化为 int 类型的地址,精确的说是转化为 4 个一组的地址的首地址,
如许 p 就指向了第一个四个字节··· p+i 就指向了第 i+1 个四个字节,p[0],p[i]也就分别是第一个,第i+1个元素。
- double *p = (double *)malloc(80);
表示将体系分派的 80 个字节的第一个字节的地址转化为 double 类型的地址,精确的说是转化为 8 个一组的地址的首地址,
释放 p 所指向的内存,而不是释放 p 本身所占用的内存
代码示例如下:
- void test2(void)
- {
- int len;
- printf(“请输入你要动态创建的数组长度:”);
- scanf(“%d”,&len);
- int *pArr = (int *)malloc(len); // 动态创建数组
- *pArr = 4; // 相当于 a[0] = 4; 这里 pArr 就等于数组首地址,等于数组名
- pArr[2] = 5; // 相当于 a[2] = 5;
- printf("pArr[0] = %d \npArr[2] = %d\n",pArr[0],pArr[2]);
- free(pArr); // 应用完毕,释放对应的数组空间
- }
跨函数应用内存
在函数内部分派的局部变量,在函数调用完成之后就会被体系收受接收,其内存也挥蓰掉。然则法度榜样中经常须要定义一块内存,当我们用完之后再会收受接收。如 OC 说话中对象。所以须要保存住分派的内存,应当用动态分派内存,当用完之后再手动释放。这也是C说话的一个不足之处:内存须要我们手动创建和手动释放,这也是 OC 说话在开辟 iOS 法度榜样时刻,我们所讲的MRC。【苹不雅也发清楚明了这个不足,于 iOS 5 的时刻推出了ARC 】
下面是一个跨函数应用内存的例子:
- // 这个例子已经异常有面向对象的味道了
- typedef struct Student{ // 自定义 student 构造体
- int age;
- char * name;
- }myStudent;
- myStudent * createStudent(void); // 创建 student
- void showStudent(myStudent *); // 输出 student
- int main(void) {
- myStudent *p = createStudent(); // 创建 student
- showStudent(p); // 输出 student
- return 0;
- }
- myStudent * createStudent(void)
- {
- myStudent p = (myStudent )malloc(sizeof(myStudent));
- p->age = 20;
- p->name = “xiaoyou”;
- return p;
- }
- void showStudent(myStudent *p)
- {
- printf(“student.age = %d \nstudent.
推荐阅读
开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散日前,中国银联联袂贸易银行、付出机构等家当各方合营宣布银行业同一APP“云闪付”。 大年夜家经由过程这一APP即可绑定和治>>>详细阅读
本文标题:带你了解数据结构的定义和简介
地址:http://www.17bianji.com/lsqh/39702.html
1/2 1