零碎知识点总结

1.解析p159

#include <iostream>
using namespace std;
int main(){
    //Part I
    char *s[]={"nanjingnanyouknow"}; //win下char *的大小为4,mac下char *大小为8
                                     //大小和CPU的使用相关
    char *s1[]={"n"};
    char *s2[]={"n1","n2"};
    char *str={"nanjingUniversity"};
    char *str1={"n"};
    //Part II
    char a1[]="seuBME";    //数组的内存空间要算上\0的一个
                           //char类型占一个字节
    char a10[]={"seuBME"}; //和char a1[]="seuBME";是等价的
    char a11[]={'s','e','u','B','M','E','\0'}; //同上一行注解
    char a12[]={'s','e','u','B','M','E'};  //和前面三种写法结果不一致
    char a2[10]="seu";     //声明10个元素的数组空间就为10个,包括\0在内
    //Part I'
    cout<<"    "<<"Part I"<<endl;
    cout<<"[]sizeof(s)"<< sizeof(s)<<endl;  //占的内存空间
    cout<<"[]sizeof(*s)"<<sizeof(*s)<<endl; //第一个元素的内存空间
    cout<<"[]sizeof(s1)"<< sizeof(s1)<<endl;
    cout<<"[]sizeof(*s1)"<< sizeof(*s1)<<endl;
    cout<<"[]sizeof(s2)"<< sizeof(s2)<<endl;
    cout<<"[]sizeof(*s2)"<< sizeof(*s2)<<endl;
    //Part II'
    cout<<"    "<<"Part II"<<endl;
    cout<<"sizeof(str)"<< sizeof(str)<<endl;
    cout<<"sizeof(*str)"<< sizeof(*str)<<endl;
    cout<<"strlen(*str)"<<strlen(str)<<endl;
    cout<<"sizeof(str1)"<< sizeof(str1)<<endl;
    cout<<"sizeof(*str1)"<< sizeof(*str1)<<endl;
    cout<<"strlen(*str1)"<<strlen(str1)<<endl; //字符串的长度,不算最后的\0
    cout<<"a1[]sizeof(a1)"<<sizeof(a1)<<endl;
    cout<<"a10[]sizeof(a10)"<<sizeof(a11)<<endl;
    cout<<"a11[]sizeof(a11)"<<sizeof(a11)<<endl;
    cout<<"a12[]sizeof(a12)"<<sizeof(a12)<<endl;
    cout<<"a2[10]sizeof(a2)"<<sizeof(a2)<<endl;
    //Part III'
    cout<<"    "<<"Part III"<<endl;
    cout<<"sizeof(\"abcde\")"<<sizeof("abcde")<<endl;

    return 0;
}

输出结果为:

    Part I
[]sizeof(s)8
[]sizeof(*s)8
[]sizeof(s1)8
[]sizeof(*s1)8
[]sizeof(s2)16
[]sizeof(*s2)8
    Part II
sizeof(str)8
sizeof(*str)1
strlen(*str)17
sizeof(str1)8
sizeof(*str1)1
strlen(*str1)1
a1[]sizeof(a1)7
a10[]sizeof(a10)7
a11[]sizeof(a11)7
a12[]sizeof(a12)6
a2[10]sizeof(a2)10
    Part III
sizeof("abcde")6

Process finished with exit code 0


2.strcmp函数和strcpy函数

strcmp函数:

①字符串1小于字符串2,strcmp函数返回一个负值;
②字符串1等于字符串2,strcmp函数返回零;
③字符串1大于字符串2,strcmp函数返回一个正值;

         实际上,字符串的比较是比较字符串中各对字符的ASCII码。首先比较两个串的第一个字符,若不相等,则停止比较并得出大于或小于的结果;如果相等就接着 比较第二个字符然后第三个字符等等。如果两上字符串前面的字符一直相等,像"disk"和"disks"   那样,   前四个字符都一样,   然后比较第 五个字符,   前一个字符串"disk"只剩下结束符'/0',后一个字符串"disks"剩下's','/0'的ASCII码小于's'的ASCII 码,所以得出了结果。因此无论两个字符串是什么样,strcmp函数最多比较到其中一个字符串遇到结束符'/0'为止,就能得出结果。


strcpy函数:

strcpy函数用于实现两个字符串的拷贝。一般形式是:  

                 strcpy(字符中1,字符串2)

         其中,字符串1必须是字符串变量,而不能是字符串常量。strcpy函数把字符串2的内容完全复制到字符串1中,而不管字符串1中原先存放的是什么。复制后,字符串2保持不变。  




3.字符串相关

字符串声明:

#include <iostream>
using namespace std;
int main(){
    char *oldC="seuBME";
    cout<<oldC<<endl;
    char a[]="seuee";
    cout<<*a<<endl;
    cout<<a<<endl;
    return 0;
}
    这里,输出

seuBME
s
seuee

Process finished with exit code 0


字符串常量&字符串变量:

字符串常量指的是,初始时用" "赋值的字符串。

字符串变量可以对值进行修改,字符串常量不能。

输入:

#include <iostream>
using namespace std;
int main(){
    //From
    char str[10];         //字符串 变 量
    char str1[]="abcd";   //字符串 变 量
    char str2=48;         //字符串 变 量
    char *str3="abcde";   //字符串【常】量
    char c='a';           //字符串 变 量
    cout<<"From"<<endl;
    cout<<"str1="<<str1<<endl;
    cout<<"str2="<<str2<<endl;
    cout<<"str3="<<str3<<endl;
    cout<<"c="<<c<<endl;

    //Latter
    *str = 'z';           //字符串变量可以对值改变,字符串常量不能改变
    *str1 = 'z';
    str2 = 'z';
    c= 'z';
    cout<<endl<<"Latter"<<endl;
    cout<<"str="<<str<<endl;
    cout<<"str1="<<str1<<endl;
    cout<<"str2="<<str2<<endl;
    cout<<"str3="<<str3<<endl;
    cout<<"c="<<c<<endl;
    return 0;
}
输出:

From
str1=abcd
str2=0
str3=abcde
c=a
Latter


str=z
str1=zbcd
str2=z
str3=abcde
c=z


Process finished with exit code 0




4.字符串的定义和更改

输入:

#include <iostream>
using namespace std;
int main(){
    char a[]="bme";   //字符串变量,可以改变
    char *p=&a[0];    //指针p指向a[0]
    char *p1= a;      //指针p1指向a[0]
    *a = 'e';        //改变字符串变量的值,这里改变的是一个值,即a[0]
                     //a[]是数组类型,不能一次改变全部的值
                     //如 a = "seu" 是错误的
    p = "nupt";      //这里是将指针指向新的变量,即新的字符串nupt
                     //并非改变数组a的值
    cout<<"a="<<a<<endl;
    cout<<"p="<<p<<endl;
    cout<<"p1="<<p1<<endl;
    return 0;
}

输出:

a=eme
p=nupt
p1=eme


Process finished with exit code 0



5.为什么 sizeof("1234\056") 的值是6,而sizeof("abcd\0sf")的值是8。

A:

"1234\056"依次包含:'1'、'2'、'3'、'4'、'\056'、'\0',共计6字符。
"abcd\0sf"依次包含:'a'、'b'、'c'、'd'、'\0'、's'、'f'、'0',共计8字符。









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值