c语言指针

C语言指针

此生再无相见时 提交于 2020-01-25 00:32:54
指针 指针 指针变量的定义语法 取地址运算符:& 间接运算符:* 空指针 void指针 malloc函数 const 常量指针 常量指针 常量指针变量 指针常量 指针与数组 通过指针变量访问数组 数组指针 指针数组 指向函数的指针(函数指针) 指针 指针 就是内存地址,指针变量就是存储地址的变量. 作用: 使用指针可提高程序的编译效率和执行速度,是程序更加简洁;通过传递指针参数,使被调用函数可向主调函数返回除正常的返回值之外的其他数据,从而达到两者之间的双向通信;还有一些任务,如动态内存分配,没有指针是无法执行的;指针还用于表示和实现各种复杂的存储结构(如链表),从而为编写出更高质量的程序奠定基础;利用指针可以直接操纵内存地址,从而可以完成和汇编语言类似的工作. c语言提供 两种指针运算符 : * 和 & . 指针变量的定义语法 指针变量的定义语法: 数据类型 * 变量名 [ = 初值 ]; 指针变量定义时,数据类型并不是指指针变量的数据类型,而是其所指目标对象的数据类型.例如: int* p ;定义 p 是指针变量,可以存储 int 型变量的地址,p 变量的类型是 int*,而不是 int.这是告诉编译器, p 变量只能存储整型变量的空间地址,不能存储其他类型空间的地址 取地址运算符:& p = &a; 表明得到整型变量 a 的地址,并把该地址存入指针变量 p 中

C语言文件操作解析

爷,独闯天下 提交于 2020-01-24 04:12:42
转自:http://www.cnblogs.com/dolphin0520/archive/2011/10/05/2199396.html C语言文件操作解析(一) 在讨论C语言文件操作之前,先了解一下与文件相关的东西。 一.文本文件和二进制文件 文本文件的定义:由若干行字符构成的计算机文件,存在于计算机系统中。文本文件只能存储文件中的有效字符信息,不能存储图像、声音等信息。狭义上的二进制文件则指除开文本文件之外的文件,如图片、DOC文档。 事实上,无论是上面所定义的文本文件还是二进制文件,在计算机中存储都是以二进制的形式存储的,因此其本质并没有区别。所以广义上的二进制文件便指所有的文件。 通常意义下,我们所说的文本文件指只包含了纯文本信息的文件(通过手动编辑完成,包含的都是可显字符),二进制文件特指文件里面存储的是二进制代码的文件。至于为什么在计算机内存储的都是二进制数据,而给我们所呈现的确是文字、图像等信息,这跟计算机硬件组成有关系,因为计算机里面的元件是晶体管,其只有两种稳定的状态,因此二进制的0和1能表示其状态。很多个晶体管的不同状态的组合便呈现给我们不同的信息了。下面以汉字在计算机中的表示为例。 二.汉字在计算机中的表示 用计算机去处理汉字信息,必须对汉字进行编码,变成能被计算机识别的二进制。汉字编码主要有输入码、机内码、字形码三种。分别有不同的作用。 输入码

C语言文件操作

戏子无情 提交于 2020-01-24 04:10:26
C语言中没有输入输出语句,所有的输入输出功能都用ANSI C提供的一组标准库函数来实现。文件操作标准库函数有:       文件的打开操作 fopen 打开一个文件       文件的关闭操作 fclose 关闭一个文件       文件的读写操作 fgetc 从文件中读取一个字符               fputc 写一个字符到文件中去               fgets 从文件中读取一个字符串               fputs 写一个字符串到文件中去               fprintf 往文件中写格式化数据               fscanf 格式化读取文件中数据               fread 以二进制形式读取文件中的数据               fwrite 以二进制形式写数据到文件中去               getw 以二进制形式读取一个整数               putw 以二进制形式存贮一个整数     文件状态检查函数 feof 文件结束               ferror 文件读/写出错               clearerr 清除文件错误标志               ftell 了解文件指针的当前位置       文件定位函数 rewind 反绕               fseek 随机定位

第六周编程总结

a 夏天 提交于 2020-01-23 05:12:54
6-1 求两数平方根之和 (10 分) 函数fun的功能是:求两数平方根之和,作为函数值返回。例如:输入12和20,输出结果是:y = 7.936238。 函数接口定义: double fun (double a, double b); 其中 a和 b是用户传入的参数。函数求 a指针和b 指针所指的两个数的平方根之和,并返回和。 裁判测试程序样例: include<stdio.h> include <math.h> double fun (double a, double b); int main ( ) { double a, b, y; scanf ("%lf%lf", &a, &b ); y=fun(&a, &b); printf ("y=%.2f\n", y ); return 0; } /* 请在这里填写答案 */ 输入样例: 12 20 输出样例: y=7.94 1)实验代码 double fun (double *a, double *b) { double y; y=sqrt(*a)+sqrt(*b); return y; } 2)设计思路 3)本次调试过程中遇到的问题 问题:主要是输出重复以及返回错误。把printf语句删除,把return 0改为return y. 4)运行结果截图 7-1 利用指针返回多个函数值 (30 分) 读入n个整数,调用max_min(

初识Java

不羁的心 提交于 2020-01-23 03:30:24
Java三大版本 • J2SE Java的标准版本 (Java2 Standard Edition) 定位在客户端,主要用于桌面应用软件的编程 • J2ME (Java2 Micro Edition) 主要应用于嵌入式系统开发,如手机和PDA的编程 • J2EE 企业版本(Java2 Enterprise Edition)定义在服务器端Java2的企业版,主要用于分布式网络程序的开 发,如电子商务网站 • 2005 JavaOne大会召开,Sun公司公开Java SE6。此时,Java的各种版本被更名,取消其中的数字"2": J2EE更名为Java EE, J2SE更名为Java SE,J2ME更名为Java ME Java特点 1、 Java是跨平台的 JAVA程序的跨平台主要是指字节码文件可以在任何具有Java虚 拟机的计算机或者电子设备上运行,Java虚拟机中的Java解释 器负责将字节码文件解释成为特定的机器码进行运行。 2、Java是简单的 • 不再有#include 和#define 等预处理功能 • 不再有struct,union及typedef • 不再有函数、 • 不再有指针、不再有多重继承 • 不再有goto • 不再有操作符重载(Operatior Overloading) • 不再有全局变量 取消自动类型转换,要求强制转换 • 不再有手动内存管理 3

第三章 语义陷阱

北慕城南 提交于 2020-01-23 01:53:40
3.5 空指针不等于空字符串 由编译器保证0么有效的指针。 当常数0转化为指针时,这个指针不能被解引用。换句话说。当我们将0赋值给一个指针变量时,绝对不能企图使用该指针所指向的内存中存储的内容。 3.6边界计算与不正确称边界 3.7求值顺序 C语言中仅仅有四个运算符(&&。||,?:,,)存在规定的求值顺序。 逗号是先对左側表达式求值。然后丢弃该值,再对右側求值。 其它的比如a>b,编译器有可能先对a求值也有可能对b求值。 以下的程序是不正确的,由于求值顺序不定: i=0; while(i<n) y[i]=x[i++]; y[i]的地址是不确定的。 3.9整数溢出 在无符号算数运算中。没有所谓的‘溢出’一说:全部的无符号运算都以2的n次方为模。n是结果中的位数。 假设算数运算中的操作数,一个是有符号整数,还有一个是无符号整数,那么有符号整数会被转换为无符号整数操作,溢出不会发生。 版权声明:本文博主原创文章,博客,未经同意,不得转载。 来源: https://www.cnblogs.com/yxwkf/p/4759264.html

C陷阱与缺陷--读书笔记3 语义“陷阱”

北城余情 提交于 2020-01-23 01:51:14
第三章 一、知识点 1、C语言中的数组值得注意的地方有以下两点:(P41) (1)、C语言中只有一维数组,而且数组的大小必须在编译期就作为一个常数确定下来。然而,C语言中数组的元素可以是任何类型的对象,当然也可以是另外打的一个数组。 (2)、对于一个数组,我们只能够做两件事:确定该数组的大小,以及获得指向该数组下标为0的元素的指针。其他有关数组的操作,哪怕它们乍看上去十一数组下标进行运算的,实际上都是通过指针进行的。换句话说,任何一个数组下标运算都等同于一个对应的指针运算,因此我们完全可以依据指针行为定义数组下标的行为。 2、对于int calendar[12][31]; 这个语句生命了calendar是一个数组,该数组拥有12个数组类型的元素,其中每个元素都是一个拥有31个整型元素的数组。(P42) 3、如果两个指针指向的是同一个数组中的元素,我们可以把这两个指针相减。(P43) 4、*(a+i)即数组中下标为i的元素的引用。由于a+i与i+a的含义一样,因此a[i]与i[a]也具有同样的含义。(P44) 5、来看几个声明:(P45) int calendar[12][31]; int *p; int i; calendar[4]是calendar数组的第5个元素,是calendar数组中12个有着31个整型元素的数组之一。可以有 p = calendar[4];

C++-Record25—C++面向对象模型初探

て烟熏妆下的殇ゞ 提交于 2020-01-22 19:27:37
目录 基本知识 汇总 this指针 总体代码 通过之前的学习,知道类里面有普通成员变量和静态成员变量,那么请问编译器是如何管理这些变量的?这个涉及到编译器如何在面向过程的基础之上提供面向对象的设计。这个话题异常重要,也决定了是否能从面向过程的思路上,转化到面向对象上来。 本次初探,目的是弄明白C++编译器是如何实现类型的封装的。 1. 语言中直接支持面向对象程序设计的部分,主要涉及如构造函数、析构函数、虚函数、继承(单继承、多继承、虚继承)、多态等等。 2. 对于各种支持的底层实现机制。 在c语言中, “数据”和“处理数据的操作(函数)”是分开来声明的 ,也就是说,语言本身并没有支持 “数据和函数” 之间的关联性。而在c++中,通过抽象数据类型(abstract data type,ADT),在 类中 定义数据和函数,来实现数据和函数直接的 绑定,也就是封装 。 概括来说,在C++类中有两种成员数据:static、nonstatic;三种成员函数:static、nonstatic、virtual。 基本知识 C++中的class从面向对象理论出发,将变量(属性)和函数(方法)集中定义在一起,用于描述现实世界中的类。从计算机的角度,程序依然由数据段和代码段构成。 C++ 编译器如何完成面向对象理论到计算机程序的转化? 换句话:C++编译器是如何管理类、对象、类和对象之间的关系的呢?

C基础第29课--指针和数组分析(下)

帅比萌擦擦* 提交于 2020-01-22 04:58:56
学习自狄泰软件学院唐佐林老师C语言课程,文章中图片取自老师的PPT,仅用于个人笔记。 实验1 :数组的访问方式 #include <stdio.h> int main() { int a[5] = {0}; int* p = a; int i = 0; for(i=0; i<5; i++) { p[i] = i + 1; } for(i=0; i<5; i++) { printf("a[%d] = %d\n", i, *(a + i)); } printf("\n"); for(i=0; i<5; i++) { i[a] = i + 10; } for(i=0; i<5; i++) { printf("p[%d] = %d\n", i, p[i]); } return 0; } mhr@ubuntu:~/work/C$ gcc 29-1.c mhr@ubuntu:~/work/C$ mhr@ubuntu:~/work/C$ ./a.out a[0] = 1 a[1] = 2 a[2] = 3 a[3] = 4 a[4] = 5 p[0] = 10 p[1] = 11 p[2] = 12 p[3] = 13 p[4] = 14 mhr@ubuntu:~/work/C$ 实验2 :数组与指针的不同 ext.c int a[] = {1, 2, 3, 4, 5}; 29-2.c

C语言博客作业—字符数组

[亡魂溺海] 提交于 2020-01-22 02:55:06
一、PTA实验作业 题目1:字符串转换成十进制整数 1. 本题PTA提交列表 2. 设计思路 (1)定义i为循环变量,number用于存放每一次转化的结果,flag用于判断是否为负数,p用于修改结果的正负; (2)定义字符型数组hexad,并输入字符串; (3)for( from i=0 to hexad[i]!='#' ) //遍历数组 if(hexad[i]为'-'且flag为零0) //说明还没有遇到第一个十六进制字符 则结果为负数; if(hexad[i]在'0'到'9'之间) //挑出十六进制字符,转成相应的十进制 number=number*16+hexad[i]-48,flag=1; else if(hexad[i]在'A'到'F'之间) number=number*16+hexad[i]-55,flag=1; else if(hexad[i]在'a'到'f'之间); number=number*16+hexad[i]-87,flag=1; end (4)输出结果 3.代码截图。 4.本题调试过程碰到问题及PTA提交列表情况说明。 一开始的思路是不太理解符号的判断规则所以想用另一个字符数组存放筛选过的字符串,然后再进行转换;但是没有办法判断好符号,所以去看了一下别的代码是怎么判断这个地方的,然后就引用了一个p来直接决定结果的正负; 而且这样就不需要两个字符数组了