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语言中很有力的一个工具,那就是函数.函数的魅力不仅于此,一个程序到最后都是由众多函数组成的,我们一定要用好函数,用熟练 ...
随机推荐
- AutoCAD如何输入文字
1 运行文字命令(这里使用单行文字),然后鼠标点击文字的起始点,如图所示 2 鼠标分别向上和向右移动一定距离,表示文字的高度(文字的大小)和文字的旋转角度(一般向右,因为是水平文字) 3 最后 ...
- 移动端弹窗 layer.js 使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- redis实现訪问频次限制的几种方式
结合上一篇文章<redis在学生抢房应用中的实践小结>中提及的用redis实现DDOS设计时遇到的expire的坑.事实上,redis官网中对incr命令的介绍中已经有关于怎样用redis ...
- ORCAD中的一些操作小技巧
1.ORCAD中改变元器件和文本字体颜色的命令: 打开在 View -> Toolbar -> Command Window.然后圈选文字(可复选),然后到 Command Window ...
- TPM:dTPM(硬件)和fTPM(固件模拟的软件模块)
转:Bitlocker.TPM和系统安全 自从微软在Windows Vista首次引入Bitlocker以来,它已经越来越多的出现在我们的周围.尤其是企业用户,Bitlocker的保护已经变得不可缺少 ...
- Spring Data JPA 事务锁
1.概述 在本快速教程中,我们将讨论在Spring Data JPA中为自定义查询方法和预定义存储库的CRUD方法启用事务锁, 我们还将查看不同的锁类型并设置事务锁超时. 2.锁类型 JPA定义了两种 ...
- 记一次Oracle数据故障排除过程
前天在Oracle生产环境中,自己的存储过程运行时间超过1小时,怀疑是其他job运行时间过长推迟了自己job运行时间,遂重新跑job,发现同测试环境的确不同,运行了25分钟. 之后准备在测试环境中制造 ...
- 部署mongodb中需要注意的调参
部署mongodb的生产服务器,给出如下相关建议: 使用虚拟化环境: 系统配置 1)推荐RAID配置 RAID(Redundant Array of Independent Disk,独立磁盘冗余阵列 ...
- KEIL下分散加载文件的使用(zt)
KEIL下分散加载文件的使用 对于分散加载的概念,在<ARM体系结构与编程>书中第11章有明确介绍. 分散加载文件(即scatter file 后缀为.scf)是一个文本文件,通过编写 ...
- 九度OJ 1055:数组逆置 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7324 解决:3429 题目描述: 输入一个字符串,长度小于等于200,然后将数组逆置输出. 输入: 测试数据有多组,每组输入一个字符串. ...