c语言学习的第13天1
#include <stdio.h>
int main(void)
{
int a[5]={1,2,3,4,5};
printf("%#x, %#x\n",a,&a[0]);
return 0;
}
验证a和&a[0]是不是同一个值,验证得出a就是a[0]的地址,a是个常量,它的值不能改变
#include <stdio.h>
void out(int *pa, int len)
{
pa[2]=10;
}
int main(void)
{
int a[5]={1,2,3,4,5};
out(a,5);
printf("%d\n",a[2]);
return 0;
}
修改数组a[2]的值
指针的运算,指针不能相加,不能相乘,也不能相除,如果两个指针变量指向的是同一块连续空间中的不同存储单元则这两个指针变量才可以相减,如下:
#include <stdio.h>
int main(void)
{
int *p;
int *q;
int a[5];
p=&a[1];
q=&a[4];
printf("p和q所指向的单元相隔%d个单元\n",q-p);
return 0;
}
得出3的值
#include <stdio.h>
int main(void)
{
char ch='A';
int i=99;
double x=66.6;
char *p=&ch;
int *q=&i;
double *r=&x;
printf("%d %d %d\n", sizeof(p), sizeof(q), sizeof(r));
return 0;
}
上面是求指针变量所占的空间大小,结果都为8个字节
结论:一个指针变量,无论它指向的变量占几个字节,该指针变量本身只占八个字节
传统数组的缺点
1.数组长度必须事先制定,且只能是长整数,不能是变量
例如:int a[5]; //ok int len=5; int a[len]; //error
第二个缺点如下:
#include <stdio.h>
int main(void)
{
int a[5]={1,2,3,4,5}; //20个字节的存储空间程序员无法手动编程释放它,只能在本函数运行完毕时由系统自动释放
return 0;
}
3.数组的长度一旦定义,其长度就不能在函数运行的过程中动态的扩充或缩小
4.A函数定义的数组,在A函数运行期间可以被其它函数使用,但A函数运行完毕之后,A函数中的数组将无法在被其它函数使用
malloc是memory(内存) allocate(分配)的缩写
#include <stdio.h>
#include <malloc.h>
int main(void)
{
int i=5;
int *p=(int *)malloc(4);
*p=5;
free(p);
printf("%d\n",sizeof(*p));
return 0;
}
#include <malloc.h>调用malloc函数需要的头文件,int i=5;静态分配了4个字节,int *p=(int *)malloc(4); malloc函数只有一个形参,并
且形参必须是整形,4表示请求系统为本程序分配4个字节,malloc函数只能返回第一个字节的地址,该行分配了12个字节,p变量占8个
字节,p所指向的内存占4个字节,p本身所占的内存是静态分配的,p所指向的内存是动态分配的,*p=5; *p代表的就是一个int变量,只
不过*p这个整形变量的内存分配方式为动态的,free(p); 表示把p所指向的内存给释放掉,p本身的内存是静态的只能由函数自动释放
#include <stdio.h>
#include <malloc.h>
int main(void)
{
int a[5];
int len;
int *p;
printf("请输入你要存放的元素的个数:");
scanf("%d",&len);
p=(int *)malloc(4*len);
return 0;
}
#include <stdio.h>
#include <malloc.h>
int main(void)
{
int a[5];
int len;
int *p;
printf("请输入你要存放的元素的个数:");
scanf("%d",&len);
p=(int *)malloc(4*len);
free(p);
return 0;
}
int a[5]; 因为int占4个字节,本数组共包含20个字节,每四个字节被当作了一个int变量来使用
p=(int *)malloc(4*len); 动态的构造了一个一维数组,该一维数组的长度是len,该数组的数组名是p,该数组每个元素是int类型,类
似于int p[len]; free(p); 释放掉动态分配的数组
c语言学习的第13天1的更多相关文章
- R语言学习笔记-机器学习1-3章
在折腾完爬虫还有一些感兴趣的内容后,我最近在看用R语言进行简单机器学习的知识,主要参考了<机器学习-实用案例解析>这本书. 这本书是目前市面少有的,纯粹以R语言为基础讲解的机器学习知识,书 ...
- Java语言学习day38--8月13日
###11哈希表的数据结构 A:哈希表的数据结构:(参见图解) 加载因子:表中填入的记录数/哈希表的长度 例如: 加载因子是0.75 代表: 数组中的16个位置,其中存入16*0.75=12个元素 如 ...
- c语言学习的第13天2
#include <stdio.h> #include <malloc.h> void f(int **q) { *q=(int *)malloc(sizeof(int)); ...
- c语言学习笔记(13)——链表
链表 算法: 1.通俗定义: 解题的方法和步骤 2.狭义定义: 对存储数据的操作 3.广义定义: 广义的算法也叫泛型 无论数据是如何存储的,对数据的操作都是一样的 我们至少可以通过两种结构来存储数据 ...
- C语言学习 第八次作业总结
本次作业其实没有新的内容,主要就是复习上一次的一维数组的相关内容.冯老师布置了5道题目,其中涉及到一些比较简单的排序或者是查找的方法.因为数据很少,所以直接使用for循环遍历就可以了. 关于本次作业, ...
- HTML语言学习笔记(会更新)
# HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...
- 20155229-付钰涵-分析自我技能延展到c语言学习状况
我的小技能 我记得幼儿园时表演的舞蹈,也记得从水彩到素描的学习,还记得小学和初中获得的钢琴省级奖项. 舞蹈止于一年级,绘画止于三年级,钢琴从学前班到高一那十年的时间里有过断续. 03年-04年的那个冬 ...
- 《C语言入门1.2.3—一个老鸟的C语言学习心得》—清华大学出版社炮制的又一本劣书及伪书
<C语言入门1.2.3—一个老鸟的C语言学习心得>—清华大学出版社炮制的又一本劣书及伪书 [薛非评] 区区15页,有80多个错误. 最严重的有: 通篇完全是C++代码,根本不是C语言代码. ...
- 12天学好C语言——记录我的C语言学习之路(Day 8)
12天学好C语言--记录我的C语言学习之路 Day 8: 从今天开始,我们获得了C语言中很有力的一个工具,那就是函数.函数的魅力不仅于此,一个程序到最后都是由众多函数组成的,我们一定要用好函数,用熟练 ...
随机推荐
- API测试工具postman使用总结
一.Postman介绍: Postman是google开发的一款功能强大的网页调试与发送网页HTTP请求,并能运行测试用例的的Chrome插件,主要用于模拟网络请求包,快速创建请求,回放.管理请求,验 ...
- 第1章 为什么创造WPF、第2章 XAML揭秘
1.2 步入WPF 下面是WPF的一些亮点: 广泛整合:各种媒体类型都能组合起来并一起呈现 与分辨率无关:因为WPF使用矢量图形 硬件加速:WPF是基于Direct3D创建的,工作全部是由GPU完成的 ...
- AAuto如何设置定时器
在设计视图中(一定要有个Form)点击左下角的功能组件 点击定时器即可切换到代码视图,并添加如下代码.其中我每隔一秒改变一下winform.static2.text的文本值
- 0x…… is not a valid instance ID怎么解决
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- vue.js+koa2项目实战(五)axios 及 vue2.0 子组件和父组件之间的传值
axios 用法: 1.安装 npm install axios --save-dev 2.导入 import axios from 'axios'; 3.使用 axios.post(url,para ...
- 检验 java 基础数据类型参数传递方式
测试证明,java基础数据类型参数传递值虽是引用传递但是值不会改变.对象是引用传递,值会改变. 为什么?找到一段话来解释这个问题. "对于字符串对象来说,虽然在参数传递的时候也是引用传递,但 ...
- BZOJ 1293 SCOI2009 生日礼物 堆
题目大意:给定一个数轴上n个点,每一个点有一种颜色,一共k种颜色.求一个最短的区间,包括全部k种颜色 卡了一段时间0.0 一開始想二分答案啥的 后来发现数据范围太大写不了0.0 后来去找题解才发现尼玛 ...
- RSA非对称算法实现HTTP密码加密传输
目前一般帐号系统,都是https来传输账户性息,申请一个https证书也不贵.但是网站的其它功能并不需要走https协议,https和http混布比较麻烦,所以决定先实现一个http协议传输RSA非对 ...
- Web大文件(夹)上传(断点续传)控件-Xproer.HttpUploader6
版权所有 2009-2017荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...
- LeetCode108_Convert SortedArray to BinarySearchTree(将有序数组转成二叉排序树) Java题解
题目: Given an array where elements are sorted in ascending order, convert it to a height balanced BST ...