登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[学习笔记] 数组,字符串,指针

[复制链接]
发表于 2018-2-4 11:15:19 | 显示全部楼层 |阅读模式
学习笔记
学习科目: C语言
学习安排: 后天完成
开始时间: 2018-02-04
结束时间:
字符型别的资料
char 可以用来存储一个字符
如:
char ch=‘h’;
存储的就是h这个字符
但是,我们通常需要使用的都是字符串,而不是单个字符
C语言中可以用字符数组 (char[]),来表示字符串
<string.h>中提供处理字符串的函数

char str[]={'h','e','l','l','o'};
一串字符就可以这样表示

如何印出一串字符
和数组的印法一样
可以写一个函数
void strprint(char str[]){
    int i;
    for(i=0;i<5;i++){
        printf("%d",str[i]);
    }
}
只需要在main中呼叫函数,就可以印出一串字符
和之前数组的问题一样,函数第三行的5是字符的长度,在这里是被写死了
所以我们也需要一个标记字符 '\0'
在字符串中我们用0号字符来标记
当字符串加上 '\0' 后
char str[]={'h','e','l','l','o','\0'};这个字符数组就成为了字符串
上边的函数就可以写成这样
void strprint(char str[]){
    int i;
    for(i=0;str[i]!='\0';i++){
        printf("%d",str[i]);
    }
}
上面的字符串只有6个字符,那如果我们想要输入12个,甚至更长的字符串时
要打很多的 '' 就会很烦
C语言中,字符串还可以这样表示
char str[]="hello world";
这样就会方便很多,上面这个例子就有12个字符,空格也算字符
那怎么数也只有11个啊,其实C语言在hello Word自动的给你补上了一个 '\0'
就是说当 定义字符串时 []内没有填数字,就会自动给你补一个 '\0'
那如果 char str[15]="hello world";呢?
我们定义了长度为15个char的字符串可以上面只有11个字符,那剩下的就会给你补上4个 '\0'
而 char str[11]="hello world"这个的最后是不会补上 '\0' 的

这里补充一个scanf的知识点
其实我们在使用scanf时,是在从stdin的库中读取数据(名称叫做,标准输入)
在使用者还没有按下enter键时scanf从stdin中读取不到数据,就会卡住
知道使用者,从键盘输入一些数据,并按下enter键时,这些数据就会被存入stdin之中
这个时候scanf才会顺利的执行下去

/*指针也是一种型别
可以用来存放变量的地址(变量必须是明确的)
比如:
int count =9;
int *countaddr = &counr;
&是取址运算符,可以读取变量的地址,但是,这变量的地址,只能存放在指针中
强行运行的话编译器会给出警告
相应类型的变量,地址只能存放在相应类型的指针
如:
double a;
double *aaddr=&a;
a的类型是double,所以double的地址只能存放在double类型的指针中

变量的地址是固定的,也就是一个变量从出生到死他的地址都不会变
如果
int b=9;
int* baddr=b;
那么*baddr就表示b
*的后面必须是地址,也就是指针
*/
#include<stdio.h>
void add(int* p){
    *p=*p+1;
}

int main()
{
    int a=2;
    add(&a);
    printf("%d",a);
    return 0;
}
/*在之前函数的时候,说过一个变量的存活范围是它所在的花括号
函数中的变量在函数结束以后就会消失,而且对原本传入函数的值没有任何影响
但是指针就不一样了,指针可以通过修改地址中的变数,从而影响到这个地址中的变量


好懒~~不想说~~~
 楼主| 发表于 2018-2-4 11:16:40 | 显示全部楼层
#include<stdio.h>
void swap(int *p,int *q){
    int i;
    i  = *p;
    *p = *q;
    *q = i ;
}

int main()
{
    int a=5,b=3;
    swap(&a,&b);
    printf("%d,%d",a,b);
    return 0;
}
通过swap这个函数,我们将a和b的地址传入函数,最终通过指针修改这个地址内的值,这时候的a和b已经不是原来的a和b了
好懒~~不想说~~~
 楼主| 发表于 2018-2-4 11:18:23 | 显示全部楼层
#include<stdio.h>
void s(int *p,int *q){
    if(*p>*q){
        int i=*p;
        *p=*q;
        *q=i;
    }
}

int main()
{
    int a,b;
    printf("输入两个数:");
    scanf("%d%d",&a,&b);
    s(&a,&b);
    printf("%d,%d",a,b);
    return 0;
}
好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表