标签:
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
【字符串的输入输出】
1、字符串输出:
%s-------从给定的地址开始输出字符直到遇到\0停止;
printf("%s\n",&a[3]);
printf("%s\n",a);
char a[]="hellowo\0rd!";
2、字符串输入:
从键盘上接收一个字符串,保存在以a为首地址的字符数组中
scanf("%s",a);
printf("%s\n",a);
如果用%s输入注意空格问题
如果输入的字符串有空格,则空格之后的字符无法被接收,输入遇到空格就结束;
输入的字符串的长度要小于数组的长度,会越界;
3、字符串结束符的使用:
结束符\0;
结束符可以用来判断字符的长度;
没有结束符%s无法停止;
不当的使用\0;会只打印部分;
4、字符串长度的计算方法:
1)int n=sizeof(a);不受\0的影响;
2)字符串函数计算长度 strlen(str1);
3)以\0作为条件,进行判断,遇到\0就结束;\0之前的就是字符串的长度;
5、字符数组和普通数组的区别:
没有本质的区别:
Char[],int[]
数组名是一个指针地址,一个常量,元素有类型;
【字符串相关函数】
1、字符串函数:
#include <stdio.h> 标准的输出输入函数头文件
1)puts()输出一个字符串
char a[]="Hello, World!";
puts(a);
自动换行,()里面是一个字符数组地址;
2)gets()输入一个字符串: gets(b);里面是数组名地址;
warning: this program uses gets(), which is unsafe.
有一个不安全警告,存在越界问题;可以接收空格;尽量不要越界;
#include <string.h> 字符串函数头文件
3)strcat()连接一个字符串
char a[100]="Hello",b[]=", World!";
strcat(a,b);
puts(a);
把b连接到a的后面;b把a的最后一个字符\0给覆盖了
必须要加头文件,#include <string.h>
把a和b连起来变成新的a,a的长度要足够大,至少要能够保持a+b
4)strcpy;字符串拷贝函数;
strcpy(a, b);把b的字符串拷到a的字符串中;其中a要足够大,可能要越界;
5)stecmp ; 字符串的比较函数;
strcmp(a, b);比较两个字符串的大小;
规则:比较他们的ASCII值,比较在字典中出现的顺序
比较的过程:逐个比较;
返回值:大于0--a>b,小于0---a<b,等于0---a=b;值是两个字符串相差元素的个数;
6)strlen 字符串的长度计算函数;
int i=strlen(a);不包含\0,和数组长度无关,和字符元素有关
【指针】
1、指针概念:
内存单元的编号也就是地址,根据地址就可以找到所存内容,所有把这个地址称为指针;指针就是一个内存单元编号地址;
内存单元地址就是指针,其中的数据是单元的内容;
2、指针的好处:
1)为函数提供修改变量的灵活手段;
2)让函数有多个返回值;
3)可以改善子程序的效率
4)为动态数据结构提供支持
3、变量的存取方式
1)直接存取 通过变量名获取变量值;
2)间接存取 通过指针(地址)来获取变量值;
4、指针变量:
存放指针的变量,存放地址的变量;用一个变量存放指针
指针是一个地址,是一个常量;
指针变量是存放一个地址,是一个变量;
5、定义指针变量:
三部分:
1)指针类型说明,即定义变量为一个指针变量
2)指针变量名
3)变量值(指针)
一般形式:
类型声明符 *变量名;类型声明是表示指针指向变量的存储的类型
Int *a;
6、定义注意事项:
1)”*“必须有,如果没有就相当于定义了一个普通变量;
2)指针变量不能用来存放数值和字符,只能放地址;
3)存放地址的存储数据类型要一致;
4)与变量相同也有全局和局部之分;
【指针变量初始】
1、初始化:
1)定义的同时进行初始化:
完全初始化:
int i=0;
int *a1=&i,*a2=&i; a1a2都指向了i;
部分初始化
int *a1=&i,*a2;
2)先定义后初始化:
int i=0;
int *a;
a=&i;
3)如果定义了一个指针,但是不知让指针指向谁
int *a1=null;null是空0;
int *a1=0;什么也不指向;
常见的错误:
int *a1=1000;应该存放地址;
指针的指向可以变;
int *a1=*a2;
如果没有初始化是一个野指针;
2、使用*来获取指针对应的存储区内容:
&:取地址符号;
*:指针运算符号;
int i = 10;
int *a;
a = &i;
int b = *a;
*指针变量,作用:获取指针变量指向的存储内容的内存
”*“两种用法:
1)用于定义一个指针变量:int *a1=&i
2)获取值int b = *a;
3)设定指针变量指向存储空间的内容
int i=10;
int *a=&i;
*a=100;
如果一个指针变量没有初始化,这个指针变量存放的是一个垃圾数,这个指针变量称为野指针,
两个数交换:
1 #include <stdio.h> 2 3 void change(int *p1,int *p2); 4 5 void change(int *p1,int *p2){ 6 7 *p1 = *p1^*p2; 8 9 *p2 = *p1^*p2; 10 11 *p1 = *p1^*p2; 12 13 } 14 15 int main(int argc, const char * argv[]) { 16 17 int a = 10, b = 20; 18 19 int *p1 = &a, *p2 = &b; 20 21 change(p1, p2); 22 23 printf("a=%d\nb=%d\n",*p1,*p2); 24 25 return 0; 26 27 }
3、指针的常见运用场景:
1)在函数中间接访问调用者中的变量:
2)让函数可以有多个返回值;
【二级指针】
1、二级指针:
如果一个指针变量存放的又是另一个指针变量的地址,则这个指针变量为指向指针的指针变量。也为二级指针;
int*p=&a;
int**p1=&p;
*一级指针,**二级指针,***三级指针;
2、指针区分类型;
同一个编译器下,一个指针所占空间是确定的,在64位系统中占8个字节;
定义什么类型的指针就指向什么类型的变量;
黑马程序员---C基础9【字符串的输入输出】【字符串相关函数】【指针】【指针变量初始】【二级指针】
标签:
原文地址:http://www.cnblogs.com/snowimba/p/4853979.html