指针变量

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 随机定位

指针和引用的区别

≡放荡痞女 提交于 2020-01-24 02:13:13
指针和引用都是C++中常见的概念,但是好像之前没有系统地整理过,还是有些模糊二者的区别,今天想详细地整理一下: 指针: 是一个变量,存储一个地址,指向内存的一个存储单元。 引用: 是原来变量的一个别名,实质上和原来的变量是同一个东西。 区别: 1.指针可以用const修饰,const引用只读不可改。 2.指针可以多级,但引用只有一级。(存在int**p,不存在int&&p) 3.指针的值可以为空,但是引用不可以,引用必须在定义的时候进行初始化。 4.指针在初始化之后可以改变,指向其他的存储单元,但是引用初始化后不可以改变,但是引用指向的内容可以改变。 string str1 = "a"; string str3 = "b"; string &str2 = str1; str2 = str3; 上面的例子结果,str1,str2,str3最后的值都是"b"。 5.sizeof(引用)得到引用所指向的对象的大小,sizeof(指针)得到的是指针本身的大小。 来源: CSDN 作者: Miss just 链接: https://blog.csdn.net/Missjust/article/details/103837175

数组指针,指针数组,数组名,指针变量名作函数的参数

允我心安 提交于 2020-01-23 19:27:47
想当年学得比较晕的部分,近日整理了下 #include <stdio.h> /*指针的基本概念,理解,应用,强制类型转换 初始化有三种方式: int a,b = 1000,*pointer_a = &a,*pointer_b; 声明的同时初始化,也可先声明再初始化 *pointer_b = &b;pointer_b = pointer_a; 赋值,b指向a指的内存,要求两者数据类型一致 所有指针类型,均占四个字节的存储空间,类型不同的指针变量之间不能直接赋值,可以通过强制类型转换 void类型是万能类型,无需任何转换,可与其他类型相互赋值 例如:pointer_a = (int*)1245056 1245056是变量a的地址 */ //实例1 #if(0) #include <stdio.h> int main(){ int a = 1000,*pointer_a = &a; char ch,*point_ch; point_ch = &ch; ch = 'A'; *point_ch = 'B'; pointer_a = (int*)1245056; //把数值强制转换为指针类型,不可直接赋值 pointer_a = 1245054 printf("&a = %d,&ch = %d,pointer_a = %d\n",&a,&ch,pointer_a); printf("ch =

名字与地址转换(摘抄自网络)

▼魔方 西西 提交于 2020-01-23 18:23:23
一、gethostbyname()函数说明——用域名或主机名获取IP地址 包含头文件 #include <netdb.h> #include <sys/socket.h> 函数原型 struct hostent *gethostbyname(const char *name); 这个函数的传入值是域名或者主机名,例如"www.google.cn"等等。传出值,是一个hostent的结构。如果函数调用失败,将返回NULL。 返回hostent结构体类型指针 hostent->h_name 表示的是主机的规范名。例如www.google.com的规范名其实是www.l.google.com。 hostent->h_aliases 表示的是主机的别名.www.google.com就是google他自己的别名。有的时候,有的主机可能有好几个别名,这些,其实都是为了易于用户记忆而为自己的网站多取的名字。 hostent->h_addrtype 表示的是主机ip地址的类型,到底是ipv4(AF_INET),还是pv6(AF_INET6) hostent->h_length 表示的是主机ip地址的长度 hostent->h_addr_lisst 表示的是主机的ip地址,注意,这个是以网络字节序存储的。千万不要直接用printf带%s参数来打这个东西,会有问题的哇。所以到真正需要打印出这个IP的话

GO语言-指针

霸气de小男生 提交于 2020-01-23 13:13:59
一、Go语言中的指针 任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址,我们就需要指针变量。 比如,“永远不要高估自己”这句话是我的座右铭,我想把它写入程序中,程序一启动这句话是要加载到内存(假设内存地址0x123456),我在程序中把这段话赋值给变量 A ,把内存地址赋值给变量 B 。这时候变量 B 就是一个指针变量。通过变量 A 和变量 B 都能找到我的座右铭。 Go语言中的指针不能进行偏移和运算,因此Go语言中的指针操作非常简单,我们只需要记住两个符号: & (取地址)和 * (根据地址取值)。 1.1 指针地址和指针类型 每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。Go语言中使用 & 字符放在变量前面对变量进行“取地址”操作。 Go语言中的值类型(int、float、bool、string、array、struct)都有对应的指针类型,如: *int 、 *int64 、 *string 等。 取变量指针的语法如下: ptr := &v // v的类型为T 其中: v:代表被取地址的变量,类型为 T ptr:用于接收地址的变量,ptr的类型就为 *T ,称做T的指针类型。*代表指针。 举个例子: func main() { a := 10 b := &a fmt.Printf("a:%d ptr:%p\n", a

第六周编程总结

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(

第三章 语义陷阱

北慕城南 提交于 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];

什么“取消引用”指针意味着什么?

梦想的初衷 提交于 2020-01-23 01:00:03
请提供一个解释示例。 #1楼 指针是值的“引用”..很像库函数是对书的引用。 “解除引用”电话号码实际上正在通过并检索该书。 < c ode>int a=4 ; int *pA = &a ; printf( "The REFERENCE/call number for the variable `a` is %p\n", pA ) ; // The * causes pA to DEREFERENCE ... `a` via "callnumber" `pA`. printf( "%d\n", *pA ) ; // prints 4.. 如果这本书不在那里,图书管理员就会开始大喊大叫,关闭图书馆,并且有几个人会调查一个人去寻找一本不存在的书的原因。 #2楼 简单来说,解除引用意味着从该指针指向的某个内存位置访问该值。 #3楼 我认为之前的所有答案都是错误的,因为它们声明解除引用意味着访问实际值。 维基百科提供了正确的定义: https : //en.wikipedia.org/wiki/Dereference_operator 它对指针变量进行操作,并返回一个等于指针地址值的l值。 这称为“解除引用”指针。 也就是说,我们可以取消引用指针而无需访问它指向的值。 例如: char *p = NULL; *p; 我们取消引用NULL指针而不访问其值。 或者我们可以这样做: p1 = &