C语言之数组(补充)、指针(上)

文章介绍了C语言中用于处理字符串的函数,如puts用于输出字符串,gets用于输入字符串,strcat用于字符串连接,strcpy用于字符串复制,strcmp进行字符串比较,strlen计算字符串长度,以及strlwr和strupr转换字符串大小写。此外,还讲解了指针的概念,包括取地址操作符&,指针变量的使用,以及如何通过指针传递和修改变量的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

数组(补充)

字符串处理函数

指针

取地址变量

指针变量

指针的使用


数组(补充)

字符串处理函数

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按到大量的例子)
  • 但是当任何数值都是有效的可能结果时,就得分开返回了。

指针中的常见错误:定义了指针变量,还没有指向任何变量,就开始使用指针。
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值