#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的更多相关文章

  1. R语言学习笔记-机器学习1-3章

    在折腾完爬虫还有一些感兴趣的内容后,我最近在看用R语言进行简单机器学习的知识,主要参考了<机器学习-实用案例解析>这本书. 这本书是目前市面少有的,纯粹以R语言为基础讲解的机器学习知识,书 ...

  2. Java语言学习day38--8月13日

    ###11哈希表的数据结构 A:哈希表的数据结构:(参见图解) 加载因子:表中填入的记录数/哈希表的长度 例如: 加载因子是0.75 代表: 数组中的16个位置,其中存入16*0.75=12个元素 如 ...

  3. c语言学习的第13天2

    #include <stdio.h> #include <malloc.h> void f(int **q) { *q=(int *)malloc(sizeof(int)); ...

  4. c语言学习笔记(13)——链表

    链表 算法: 1.通俗定义: 解题的方法和步骤 2.狭义定义: 对存储数据的操作 3.广义定义: 广义的算法也叫泛型 无论数据是如何存储的,对数据的操作都是一样的 我们至少可以通过两种结构来存储数据 ...

  5. C语言学习 第八次作业总结

    本次作业其实没有新的内容,主要就是复习上一次的一维数组的相关内容.冯老师布置了5道题目,其中涉及到一些比较简单的排序或者是查找的方法.因为数据很少,所以直接使用for循环遍历就可以了. 关于本次作业, ...

  6. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  7. 20155229-付钰涵-分析自我技能延展到c语言学习状况

    我的小技能 我记得幼儿园时表演的舞蹈,也记得从水彩到素描的学习,还记得小学和初中获得的钢琴省级奖项. 舞蹈止于一年级,绘画止于三年级,钢琴从学前班到高一那十年的时间里有过断续. 03年-04年的那个冬 ...

  8. 《C语言入门1.2.3—一个老鸟的C语言学习心得》—清华大学出版社炮制的又一本劣书及伪书

    <C语言入门1.2.3—一个老鸟的C语言学习心得>—清华大学出版社炮制的又一本劣书及伪书 [薛非评] 区区15页,有80多个错误. 最严重的有: 通篇完全是C++代码,根本不是C语言代码. ...

  9. 12天学好C语言——记录我的C语言学习之路(Day 8)

    12天学好C语言--记录我的C语言学习之路 Day 8: 从今天开始,我们获得了C语言中很有力的一个工具,那就是函数.函数的魅力不仅于此,一个程序到最后都是由众多函数组成的,我们一定要用好函数,用熟练 ...

随机推荐

  1. vue2.X 组件通信($emit $on props)

    1.index.html  子组件直接修改父组件的数据 组件通讯: vm.$emit(); vm.$on(); 父组件和子组件: 子组件想要拿到父组件数据: 通过 props 之前,子组件可以更改父组 ...

  2. C++的双重检查锁并不安全(转)

    一个典型的单例模式构建对象的双重检查锁如下: static Singleton * getSingleObject() { if(singleObject==NULL) { lock(); if(si ...

  3. Ubuntu搭建Http服务器

    一句命令: sudo apt-get install apache2 产生的启动和停止文件是:/etc/init.d/apache2 启动:sudo apache2ctl -k start 停止:su ...

  4. NSTimer使用不当引发的内存泄漏问题

    NSTimer可以用来执行一些定时任务,比较常用的方法就是: + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTar ...

  5. jquery插件获取事件类型

    //需要在使用函数时传入event关键字 $('[name=lprice]').change(function(event){ $('[name=lprice]').validate({ event: ...

  6. CentOS6下基于Nginx搭建mp4/flv流媒体服务器

    CentOS6下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具) 1.先添加几个RPM下载源 1.1)安装RPMforge的CentOS6源 [roo ...

  7. 【转】【selenium+Python WebDriver】之元素定位不到解决办法

    感谢: 煜妃的<Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)> ClassName定位报错问题:<[Python] ...

  8. mnesia的脏读和事物读的测试

    在mnesia中,有脏读脏写等以及事物读写,它们的差异通过测试不难发现: 代码如下: -module(mnesia_read_test). -compile(export_all). -record( ...

  9. WPF之DataGrid篇:DataGridComboBoxColumn

    准备数据源   1 准备数据源.基类为Student,数据对象为Student3,数据集为StuList3. END 编辑DataGrid显示列   1 若要填充下拉列表,请首先使用下列选项之一设置 ...

  10. Python学习笔记18:标准库之多进程(multiprocessing包)

    我们能够使用subprocess包来创建子进程.但这个包有两个非常大的局限性: 1) 我们总是让subprocess执行外部的程序,而不是执行一个Python脚本内部编写的函数. 2) 进程间仅仅通过 ...