目录
数组(补充)
字符串处理函数
c函数库中提供了一些用来处理字符串的函数:
puts 输出字符串
gets 输入字符串
(使用时注意程序前面加:#include<stdio.h>)
strcat 字符串连接
strcpy 字符串复制
strcmp 字符串比较
strlen 字符串长度
strlwr 将字符串中大写字母换成小写字母
strupr 将字符串中小写字母换成大写字母
(使用时注意程序前面加:#include<string.h>)
puts函数
一般形式:puts(字符数组)
作用:将一个字符串(以‘\0’结束的字符数列)输出到终端并换行。
int main()
{
char str[]={"China"};
puts(str);//其作用等价printf("%s",str);
}
gets函数
一般形式:gets(字符数组)
作用:从终端输入一个字符串到字符数组,并且得到一个函数值。其可以输入带空格的字符串,用scanf的%s格式不行。
int main()
{
char str[6];
gets(str);
puts(str);
}
strcat函数
一般形式:strcat(字符数组1,字符数组2)
作用:连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。
char str1[30]={"People‘s Republic of"};
char str2[]={"China"};
printf("%s",strcat(str1,str2));
s
输出:People‘s Republic of China
strcpy函数
一般形式:strcpy(字符数组1,字符串2)
作用:将字符串2复制到字符数组1中。
char str1[10],str[]={"China"};
strcpy(str1,str2);
//注意:不能用str1=str2来赋值
//注意:字符数组1的长度不应小于字符串2的长度
//注意:复制时连同字符串后面的’\0‘一起复制的字符数组1中。
strlen函数
一般形式:strlen(字符数组)
作用:测试字符串长度的函数。函数的值为字符串中的实际长度(不包括’\0‘在内)。
char str[10]={"China"};
printf("%d",strlen(str));
输出结果不是10,也不是6,而是5.也可以直接测试字符串常量的长度。
strlwr函数
一般形式:strlwr(字符串)
作用:将字符串中大写字母换成小写字母
strupr函数
一般形式:strupr(字符串)
作用:将字符串中小写字母换成大写字母
指针
取地址变量
- scanf(“%d”,&i);里的&
- 作用:获取变量的地址 ,他的操作数必须是变量
- int i;printf(“%x”,&i)
- 地址的大小是否与int相同取决于编译器
- int i;printf(“%p”,&i)
- &不能对没有地址的 东西取地址
#include<stdio.h>
int main()
{
int i=0;
int p;
p=(int)&i;
printf("0x%x\n",p);
printf("%p\n",&i);
printf("%lu\n",sizeof(int));
printf("%lu\n",sizeof(&i));
return 0;
}
指针变量
- 变量的值是内存的地址
- 普通变量的值是实际的值
- 指针变量的值是具有实际值的变量地址
作为参数的指针
- void f(int *p);
- 在被调用的时候得到了某个变量的地址:
- int i=0;f(&i);
- 在函数里面可以通过这个指针访问外卖的这个i
访问那个地址上的变量*
- *是一个单目运算符,用来访问指针的值所表示的地址上的变量
- 可以做右值也可以做左值,例如:int k=*p;*p=k+1;
*左值之所以叫左值
- 是因为出现在赋值好左边的不是变量,而是值,是表达式计算的结果:a[0]=2;*p=3
- 是特殊的值,所以叫做左值
指针的运算符&*
相互反作用:
- *&yptr -> *(&yptr)->*(yptr的地址)->得到那个地址上的变量->yptr
- &*yptr -> &(*yptr)->&(y)->得到y的地址,也就是yptr->yptr
#include<stdio.h>
void f(int *p)
void g(int k)
int main()
{
int i=6;
printf("&i=%p\n",&i);
f(&i);
g(i);
return 0;
}
void f(int *p)
{
printf("p=%p\n",p);
printf("*p=%d\n",*p);
*p=26;
}
void g(int k)
{
printf("k=%d\n",k);
}
指针的使用
指针应用场景
- 交换两个变量的值
void swap(int *pa, int *pb)
{
int t = *pa;
*pa = *pb;
*pb = t;
}
- 函数返回多个值,某些值就只能通过指针返回。
- 传入的参数实际上是需要保存带回的结果的变量。
- 函数返回运算的状态,结果通过指针返回。
- 常用的套路是让函数返回特殊的不属于有效范围内的值来表示出错:-1或0(在文件操作胡UK按到大量的例子)
- 但是当任何数值都是有效的可能结果时,就得分开返回了。
指针中的常见错误:定义了指针变量,还没有指向任何变量,就开始使用指针。