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语言中很有力的一个工具,那就是函数.函数的魅力不仅于此,一个程序到最后都是由众多函数组成的,我们一定要用好函数,用熟练 ...
随机推荐
- 先行发生原则(Happens-before)
先行发生原则(Happens-Before)是判断数据是否存在竞争.线程是否安全的主要依据. 先行发生是Java内存,模型中定义的两项操作之间的偏序关系,如果操作A先行发生于操作B,那么操作A产生的影 ...
- python:如何判断字符串中的内容是否都为数字并且把字符串转换为数字
使用str.isdigit();有两种使用方法 str.isdigit('12345') =====>True str.isdigit('aaaaa')======>False 或者 '1 ...
- iOS之手势滑动返回功能
iOS中如果不自定义UINavigationBar,通过手势向右滑是可以实现返回的,这时左边的标题文字提示的是上一个ViewController的标题,如果需要把文字改为简约风格,例如弄过箭头返回啥的 ...
- ArrayList中contains,remove方法返回为false的原因
这几天做一个项目时,遇到ArrayList.remove(Object)方法失败,而ArrayList"包含"删除的对象,这其中的"包含"不是完全包含,请看下面 ...
- Windows下安装Oracle 11g全过程。
1. 解压Oracle11.1.0.6 for win32,然后点击setup 2.选择高级安装,下一步 3.选择企业版,下一步 4.修改Oracle基目录,也可以是默认,下一步 5.将状态复选框打上 ...
- 【WPF学习笔记】[转]周银辉之WPF中的动画 && 晓风影天之wpf动画——new PropertyPath属性链
(一)WPF中的动画 动画无疑是WPF中最吸引人的特色之一,其可以像Flash一样平滑地播放并与程序逻辑进行很好的交互.这里我们讨论一下故事板. 在WPF中我们采用Storyboard(故事板)的方式 ...
- centOS下安装ejabberd
#centos (安装依赖项) sudo yum -y groupinstall "Development Tools"sudo yum -y install openssl op ...
- CocoaPods Podfile详解与使用
1.为什么需要CocoaPods 在进行iOS开发的时候,总免不了使用第三方的开源库,比如SBJson.AFNetworking.Reachability等等.使用这些库的时候通常需要: 下载开源库的 ...
- maven项目The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
用Eclipse创建了一个maven web程序,使用tomcat8.5作为服务器,可以正常启动,但是却报如下错误 The superclass "javax.servlet.http.Ht ...
- sigar 监控服务器硬件信息
转载 http://www.cnblogs.com/jifeng/archive/2012/05/16/2503519.html 通过使用第三方开源jar包sigar.jar我们可以获得本地的信息 1 ...