C语言学习(3)--字符串,函数

字符串

1.什么是字符串
“abc”
‘a’ :一个字符
“a”:是一个字符串,由若干个字符构成的串。
字符串常量:“abc” ‘a’,‘b’,‘c’,’\0’
字符串变量:没有字符串变量,用字符数组来表示字符串变量。

字符串在存储上的特点?
字符串的最后一个字符是一个特殊字符,表示字符串的结束。特殊字符 就是 ‘\0’ ‘\n’

2.字符串的输出和输入
1)输出字符串
printf("%s", “abc”);
printf(“abc”)
char str[4] = {‘a’,‘b’,‘c’,’\0’};
printf("%s\n", str);
输出结果 abc

int main()
{
    char str[4] = {'a', '\0', 'c', '\0'};
    printf("%s\n", str);
    return 0;
}

输出结果 a
char str[4] = “abc”; // yes
puts(“abc”)
puts(str)
输出abc
2) 字符串的输入
输入只能保存到变量中,对字符串来说,是保存到字符数组中。
char str[4];
scanf("%s", str); // 注意不需要对字符串数组名取地址
int a;
scanf("%d", &a);
遇到空格就认为字符串输入结束了,用scanf不能接收含有空格的字符串.

gets(str)
可以接收含有空格的字符串
注意如果输入缓冲区中有\n, gets会接收一个空串,下面代码

int main()
{
    int n;
    char s[50];
    scanf("%d", &n);   
    getchar();
    gets(s);
    puts(s);    
    return 0;
}

3) 输入中的安全性问题
gets 存在不安全
新标准建议使用fgets
fgets(s1, 1004, stdin);

3.字符串的应用
1)遍历字符串中的每个字符
// 没有到达字符串结尾的时候进入循环,到达结尾 s[i]==’\0’

for(int i=0; s[i]!='\0'; i++)
{
    if (s[i]>='0' && s[i]<='9')
     {
        ans++;  
    }
}

4.字符串处理函数

strlen(s)
求字符串的长度, 返回的是出去’\0’的其他字符的数量

strcmp(s1, s2) strncmp
字符串比较的规则是按照字符的大小(ASC码的大小)进行比较的。
返回值,s1<s2 --> -1 s1==s2 --> 0 s1>s2 -->1
对字符串大小的比较不能直接用比较运算符

strcpy(s1,s2) strncpy
把s2的内容复制到s1字符串中。
字符串复制不能直接用=的赋值来完成

函数
1,函数定义的语法
函数名 函数的返回值 参数列表 函数体
return xxx;

2,函数调用
通过函数名去调用已经写好的函数,语句有跳转。

3,函数的声明
告诉编译器函数的样子。注意是语句,不写函数体。当函数定义在后,调用在前的时候,需要先声明函数。

4,函数的参数
注意函数调用的时候的参数传递数量要一致,实参和形参的类型也要一致。

形参:函数的参数列表中定义的参数。
实参:调用函数的时候给出的参数。

向函数传递参数是采用的传值调用方法,把实参的值复制给函数的形式参数。(实参变量和形参变量是不同的变量)
在这种情况下,修改函数内的形式参数不会影响实际参数。

/* 函数定义 */

void swap(int x, int y)
{
   int temp;
   temp = x; /* 保存 x 的值 */
   x = y;    /* 把 y 赋值给 x */
   y = temp; /* 把 temp 赋值给 y */
   return;
}

/* 函数声明 */

void swap(int x, int y);
int main ()
{
   /* 局部变量定义 */
   int a = 100;
   int b = 200;
   printf("交换前,a 的值: %d\n", a );
   printf("交换前,b 的值: %d\n", b );
   /* 调用函数来交换值 */
   swap(a, b);
   printf("交换后,a 的值: %d\n", a );
   printf("交换后,b 的值: %d\n", b );
   return 0;
}

5,变量的作用域
变量可以起作用的范围。
局部变量:只能作用在它所定义的局部。
全局变量:定义在所有函数外部的变量,可以作用在整个程序中。
形参变量 :被看作是函数内部的局部变量。
当局部变量和全局变量同名的时候,在局部,只能访问到局部变量(强龙难压地头蛇)

6,变量的生存期
变量是有生命的
1)静态生存期 :生命时间就是整个程序的时间。全局变量。
2)动态生存期 :当语句运行到定义变量的语句的时候诞生,作用域结束处消亡。普通的局部变量。

特殊情况
1)用static修饰局部变量 :会将局部变量的生存期改为静态生存期
2)用static修饰全局变量 :限制全局变量只能在它所在的源代码文件中使用

#include <stdio.h>
void f()
{
   static int a = 0;
   a++;
   printf("%d\n", a);
}
int main()
{
    f();
    f();
    return 0;
}// 第二次输出结果是2

静态局部变量是在编译时赋初值的,且只赋初值一次,在程序运行时它已有初值。以后在每次调用函数时就不再重新赋初值,而是保留上次函数调用结束时的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值