A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭启冰 中级黑马   /  2015-12-4 22:30  /  791 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



上午的东西其实用的非常少,但是要知道怎么回事

    指针与整数的运算:
            只能做加和减,其他都不能

   
    指针 + 一个整数 = 指针的地址 + 这个整数 * sizeof(类型);


    指针 - 一个整数 = 指针的地址 - 这个整数 * sizeof(类型);


    可以用来遍历数组
            int nums[] = {1,2,3,4,5};
            int *p = &nums[0];
            *(p+0);//访问下标0的元素
            *(p+1);//访问下标1的元素

            for(int i=0;i<长度;i++){

                printf("%d  ",*(p+i));//或者printf("%d  ",*(p++));
            }



指针与指针的运算:
        只能做减法,关系运算

    指针与指针的减法 相当于算出 他们相差几个数据位(元素位);



指针与指针的关系运算:
        判断地址是否相等,或者判断他们地址谁更高,谁更低


字符串:
        就是一串字符并且以\0结尾


注意:\0是字符串的结尾标识,一遇到\0就代表字符串结束了,不管后面有没有


数组表示法:
        char 数组名[] = "字符串";

    例:char str[] = "abc"; //长度为4

       char str[] = "abc\0";//长度为5
                这里如果按照字符串输出,输出abc

       char str[] = "abc\0zxc";长度为8
                 这里如果按照字符串输出,输出abc



字符串常量:
        直接写一个字符串
        例:"abc";


用指针去指向字符串常量就叫指针字符串

        语法: char *变量名 = "字符串";

        例:  char *str = "abc";



常量存在常量区,程序一启动就开辟,程序退出才销毁。
写在函数内的字符数组的字符串,存在栈区,执行到声明的时候才开辟,出了作用域就回收


常量特性:不可改变


指针字符串和数组字符串的区别:
            
        1.存放的空间不同:
                指针字符串所指向的字符串存常量区
                数组字符串在本身存放的位置,暂时理解为栈区


        2.修改值的不同:
                指针字符串不可修改字符串的值
                数组字符串可以修改


        3.接收用户输入不同:
                指针字符串不可以接收用户输入
                数组字符串可以接收


        4.开辟的空间个数不同:
                指针字符串开辟2个空间,一个是存放地址的,一个是存放字符串的(常量区)
                数组字符串开辟1个空间,里面就是存放字符串的



字符串的格式化控制符:%s

puts(字符串):输出字符串,自带换行

gets(字符串数组): 输入字符串到数组,可以允许接收空格



常用的字符串函数:
    要先导入string.h



    1.strcmp:
            用法: int strcmp(字符串1,字符串2);
            用处: 比较两个字符串是否相同(实际用处)

                比较字符串1是否大于字符串2,大于返回正数,等于返回0,小于返回负数



    2.strcat:
            用法: strcat(字符数组1,字符串2);
            用处: 把字符串2接到字符数组1的实际字符串后面

        注意:第一个只能传字符数组,否则编译不报错,运行时报错
             必须保证字符数组的长度足够大

   
    3.strcpy:
            用法: strcpy(字符数组1,字符串2);
            用处: 把字符串2复制到字符数组1里面,会覆盖字符数组1原来的字符串

         注意:第一个只能传字符数组,否则编译不报错,运行时报错
             必须保证字符数组的长度足够大


    4.strlen:
            用法: strlen(字符串);
            用处:计算字符串的实际长度,遇到中文要把那个中文乘以3
            原理:一致遍历这个字符串,每次循环计数+1,直到遇到\0则结束


    Unicode
    UTF-8
    ASCII
    GB2312
    BIG5


计算机刚出来的时候,只认识0和1
那么凭什么让0和1可以显示成各种各样的文字??

比如说 长亮5下,灭2两下,就代表来聊天

        男孩本来是表示我爱你

        女孩觉得你在说:你妹

    要跟女孩建立一个手电筒亮闪的标准:

    比如说长亮5下,灭2下代表我爱你,再比如其他的XXXX


计算机很多个厂商:

    有的人可能把 0101000001 这样的翻译成 帅

    有的人把    0101000001  丑


以前计算机用来帮助打仗的,帮助美军进行情报传递

美军就建立了一套叫ASCII码的值

规定比如说把 1001 0111  就翻译成a


编码,所以也可以叫字符集

但是因为ASCII是美国人发明的,那么它只能表示26个英文字母以及一些其他的英文符号

总计128个,那么只能在美国用
    ascii只有128个,但是后面IBM扩充了128个,一共256个,后面扩充的叫后ASCII码

中国想用怎么办?没法用

所以指定了一个国标就叫gb2312,包含了中文常用的汉字和符号,也包含了英文


但是湾湾用繁体,那么他们也有一个字符编码叫 Big5,这个是包含繁体的也有英文


世界一体

    ISO组织又开创了一套标准


        因为单个字节都被英文用了

        UTF-8:这个是包含中文、英文、繁体、阿拉伯等等,中文占用2个字节


        UTF-16:在UTF-8基础上扩充的,Unicode  中文占用3个字节


    世界更多了,三个字节组合才能表示




*/

#include <stdio.h>

#include <string.h>

int main(int argc, const char * argv[]) {
   
    char str1[] = "abc";
   
    str1[0]= 'z';
   
    char *str2 = "abc";
    printf("改之前:%p\n",str2);
//    str2[0] = 'z';//这句报错
    str2 = "zbc";//可以,但是指向的是一个新的字符串,原来的字符串还是没有发生改变
    printf("改之后:%p\n",str2);
   
    return 0;
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马