您的位置:首页 > 其它

12,标准C

2013-09-13 21:45 176 查看
/*

  达内 标准C day12
2013-09-13

预习:

    1,字符串的读取
   2,多个相关字符串的表示方法
   3,文件的位置指针

 */

void* 是一种通用指针类型,可以记录任意地址数据

这种指针变量只表示内部记录了一个地址数据,关于这个数据的其他信息都一无所知

 这种指针不能直接用来获取数据,必须首先进行强制类型转换

 通用类型指针通常用来记录来源不明并且可能性很多的地址数据

 指针变量可以做函数形参,他对应的普通变量直接参与函数的执行(会被函数内部的语句改变)

用指针做形参可以实现数据的双向传递

练习:
1,编写函数交换主函数中两个变量的内容

演示用void*做形参

指针变量也可以作为函数的返回值使用

指针变量做返回值可以用来表示一个变量,而不仅仅是一个数字

演示获得最大数和最大变量的函数

指针变量做函数的返回值不可以把局部变量或块变量的地址赋值给这个返回值

指针变量支持如下四则运算

指针+整数,指针-整数,指针-指针   

计算过程中不是按照数学规则运行的,计算的结果都是有单位的,指针加减整数是移动变量单位,指针相减结果是变量单位个数

把数组名称赋值给一个指针变量后这个指针变量可以在某些时候代替这个数组

int arr[]={1,2,3,4}; int *p=arr; printf("%d",p[1]); //这是可以的

数组功能和指针的差异

1,数组名词不能被赋值,指针可以

2,sizeof结果不同,数组是总大小,指针是指针变量的大小(4)

3,数组名称取地址以后数值不变,指针变量取地址后数值改变

可以使用指针作为循环变量依次处理数组中的每个变量

声明指针变量的时候也可以使用const关键字

const int *p_num ;

上面的指针变量不可以用来修改对应的普通变量的内容

int* const p_num;

上面的指针变量本身不可以被赋值,但是用它表示的普通变量可以被赋值

>>>>>

程序在内存中是分段保存的

代码段 : 存放 程序中所有语句,运行时不可以被修改

全局段 : 存放 全局变量和静态变量,大小不随着程序而改变

栈 : 存放 局部变量、块变量、形式参数、返回值,大小随程序运行不断变化
变化方式遵循后进先出的规则,FILO
每个函数在栈中有自己的私有空间,函数运行结束后他的私有空间被计算机回收

堆 : 存放动态分配的变量,这些变量的生命周期由程序来控制 

>>>>>

字符串是由一组字符变量构成的,这些字符变量在内存中是连续存放,必须以'\0'结尾

字符串是用来描述文字信息的 

使用第一个字符的地址表示整个字符串,

字符串的地址可以保存在char*类型的指针变量中

字符串字面值是字符串的一种表示方式
例如“abc”,"def"等,字符串字面值在编译的时候会被自动加上'\0'    '\0'就是字符0

字符串字面值在编译好以后会被用首字符地址替换掉

字符串字面值存储在专门的段落里,这个段落中的内容不可以被修改,

同样内容的字符串字面值在计算机里只保存一份

两个连续的字符串字面值会被合并成一个   printf("%s","a""bc")=printf("%p","abc")

可以在程序中使用字符数组表示字符串

需要在程序中保证最后是以'\0'做结尾的

可以使用字符串字面值给字符数组进行初始化,这时最后的'0'会被自动加入到字符数组中。

初始化完成后 字符串字面值和字符数组在内存中存放在两个不同的地方。(这样的字符数组和字面值没关系)

字符数组在内存中存放的段落不确定,但是一定是可以修改的。char str[]={'a','b','c',0};//这个可以有 

C语言提供了多种标准函数对字符串进行操作,这写标准函数需要包含string.h文件

strlen 计算字符串中有效字符(不包括\0)的个数

strcat 可以把两个字符串合并成一个。用返回值表示合并后的结果。
会修改原有字符串。返回字符指针。有可能造成数组越界

strncat 功能和strcat一致,可以避免数组越界问题,多了个参数可以合并多少个字符到第一个字符串中

strcmp 可以比较两个字符串的大小,比较的依据是ASCII码的大小,从前向后比,从 第一个不同的字符串比较
需要两个字符串做参数,执行过程中不会修改参数字符串用返回值比较结果,1表示前一个大,0表示相等,-1表示后一个大

strncmp 只比较前n个字符

strcpy 可以实现字符串的拷贝功能,使用一个字符数组作为拷贝的目标
这个函数也可能造成数组的越界,使用返回值表示拷贝结果字符串

strncpy 只拷贝字符串中前n个字符

作业:

    1,编写mystrlen的函数

    2,编写mystrcat函数

    3,编写mystrcpy函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息