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); 释放掉动态分配的数组

时间: 2024-10-02 06:01:16

c语言学习的第13天1的相关文章

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

在折腾完爬虫还有一些感兴趣的内容后,我最近在看用R语言进行简单机器学习的知识,主要参考了<机器学习-实用案例解析>这本书. 这本书是目前市面少有的,纯粹以R语言为基础讲解的机器学习知识,书中涉及11个案例.分12章.作者备注以及代码部分都讲得比较深.不过或许因为出书较早,在数据处理方面,他使用更多的是plyr包,而我用下来,dplyr包效果更好.所以许多涉及数据处理的代码,其实可以用更简洁的方法重写.但是思路却是实打实的精华. 我之前在某长途动车上啃完了前三章,两个案例.但越往后读,越觉得后面

c语言学习的第13天2

#include <stdio.h> #include <malloc.h> void f(int **q) { *q=(int *)malloc(sizeof(int)); **q=5; } int main(void) { int *p; f(&p); printf("%d\n",*p); return 0; } p代表的是一个整形变量的地址(指针),因此&p就是指针的指针,f函数的形参用**q表示,*q=(int *)malloc(size

Perl语言学习笔记 13 目标操作

1.改变目录 chdir "/etc" or die "can't chdir to '/etc'!\n"; 省略参数会回到用户主目录,与cd效果一样: 2.文件名通配 my @all_files = glob "*"; #不包括以点号开头的文件 my @pm_files = glob "*.pm"; 一次匹配多种模式,用空格隔开:my @files = ".* *"; #可以匹配所有的文件,包括以点号开头

Perl语言学习笔记 6 哈希

1.哈希的键是唯一的,值可以重复! 2.访问哈希元素 $hashname{"$key"};#哈希为大括号,数组为方括号,键为字符串 $family_name{"fred"} = "firstd";#给哈希元素赋值 3.哈希键支持任意表达式 $foo = "na"; $family_name{$foo."me"};#获取$family_name{"name"}对应的值 4.访问整个哈希 %

JavaScript--基于对象的脚本语言学习笔记(二)

第二部分:DOM编程 1.文档象模型(DOM)提供了访问结构化文档的一种方式,很多语言自己的DOM解析器. DOM解析器就是完成结构化文档和DOM树之间的转换关系. DOM解析器解析结构化文档:将磁盘上的结构化文档转换成内存中的DOM树 从DOM树输出结构化文档:将内存中的DOM树转换成磁盘上的结构化文档 2.DOM模型扩展了HTML元素,为几乎所有的HTML元素都新增了innerHTML属性,该属性代表该元素的"内容",即返回的某个元素的开始标签.结束标签之间的字符串内容(不包含其它

关于c语言学习 谭浩强的书

2007-11-16 13:22:58|  分类: PROGRAMME |  标签: |举报 |字号大中小 订阅 广大有志于从事IT行业的同志们,在你们进入这一行之前千万请看这篇文章!太经典了!对你绝对有启发! 千万别买谭浩强和等级考试的书!!!!!! 整理别人的言论,请大家踊跃讨论!!!!!!!!!!!! 1:书皮上面有那么多的牛人题词,估计也许是自己的水平太低. 2:ANSI只给了两种方式:int main(void) {/*...*/}和 int main(int argc, char *

【转】朱兆祺教你如何攻破C语言学习、笔试与机试的难点(连载)

原文网址:http://bbs.elecfans.com/jishu_354666_1_1.html 再过1个月又是一年应届毕业生应聘的高峰期了,为了方便应届毕业生应聘,笔者将大学四年C语言知识及去年本人C语言笔试难点进行梳理,希望能对今年应届毕业生的应聘有所帮助. 2013年10月18日更新-->    攻破C语言这个帖子更新到这里,我不仅仅是为了补充大学学生遗漏的知识,我更重要的是希望通过我的经验,你们实际项目中的C语言写得漂亮,写出属于你的风格.“朱兆祺STM32手记”(http://bb

黑马程序员——c语言学习心得——位运算符

黑马程序员——c语言学习心得——位运算符 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 位运算符C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 1. 按位与运算 按位与运算符"&"是双目运算符.其功能是参与运算的两数各对应的二进位相与.只有对应的两个二进位均为1时,结果位才为1 ,否则为0.参与运算的数以补码方式出现. 例如:9&

C语言学习--八皇后问题

问题描述: 在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 程序设计: 1.一维数组a[17],数组分成三段,第一段a[0]用来标记八皇后安置完成:第二段a[1,8]用来标记列位置有无子,方便判断列冲突:第三段a[9,16]用来标记存储位置. 2.关键算法 递归判断位置,eightQueens . 3.对角线位置互斥判断, isDiagonal. 4.输出函数, printResult. 算法描述: 1.首次传入为数组a