zoukankan      html  css  js  c++  java
  • C/C++字符数组、字符串、字符串指针、字符串指针数组的访问操作(一维数组)

    开始:

    1.C语言中规定数组变量代表数组所在内存位置的首地址

     char  str[20] = "hello world";
     str==&str[0]
     *str=str[0]
    参考:https://www.imooc.com/article/30475
    2.char *s 与 char a[ ] 的本质区别:

           当定义 char a[10 ]  时,编译器会给数组分配十个单元,每个单元的数据类型为字符,一个字节。。

           而定义 char *s 时,  这是个指针变量,只占四个字节,32位,用来保存一个地址。。

           sizeof(a) = 10 ;

           sizeof(s)  = ?

           当然是4了,编译器分配4个字节32位的空间,这个空间中将要保存地址。



    #include <iostream>
    using namespace std;
    int main()
    {
        cout << "**********字符数组-字符串**********
    
    ";
        //char* str= "string";//字符串指针,str变量的类型是char*
        char str[] = "string";
        //cout << str;
        printf("字符数组str[]为:%s
    ", str);//系统自动输出str指向的字符串
        printf("字符数组的第一个字符:%c
    ", *str);//str指针的值是字符串“string”的首地址
        printf("字符数组的第一个字符:%c
    ", str[0]);//*str和str[0]都表示访问str[]数组的第一个字符
        printf("字符数组的第二个字符:%c
    ", *(str+1));
        printf("字符数组的第一个字符:%c
    ", str[1]);//*str+1与str[1]表示访问str[]数组第二个字符,*str+n同理
        cout << '
    ';
        cout << "**********字符串指针数组-字符串**********
    
    ";
        char* str1[] = {"hello","my","cat","ok"};
        int i1;
        i1 = sizeof(str1);
        printf("数组str1的长度为:%d
    ", i1);
        //在printf中,只要给出一个字符串的首地址,就会自动输出该字符串
        printf("字符指针数组第一个指针指向的元素%s
    ", str1[0]);//str1[0]是第一个指针,表示第一个字符串的首地址
        printf("字符指针数组第一个指针指向的元素%s
    ", *str1);//str1是第一个指针元素的首地址,*str1相当于是第一个指针元素str1[0],表示第一个字符串的首地址
        printf("字符指针数组第二个指针指向的元素%s
    ", str1[1]);//str1[1]是第二个指针,表示第二个字符串的首地址
        printf("字符指针数组第二个指针指向的元素%s
    ", *(str1 + 1));//str1 + 1是第二个指针元素的首地址,*(str1+1)相当于是第二个指针元素str1[1].之后的同理
        printf("字符指针数组第一个指针指向的元素的第一个字符%c
    ", *(str1[0]));//在字符串首地址str1[0]前加*,表示获取该字符串的第一个字符元素
        printf("字符指针数组第一个指针指向的元素的第一个字符%c
    ", **(str1));//在字符串首地址*str1前加*,表示获取该字符串的第一个字符元素
        printf("字符指针数组第一个指针指向的元素的第二个字符%c
    ", *((str1[0])+1));//字符串首地址str1[0]+1表示该字符串的第二个字符元素的地址,前加*, 表示获取该字符串的第二个字符元素
        printf("字符指针数组第一个指针指向的元素的第一个字符%c
    ", *(*(str1)+1));//在字符串首地址*(str1)+1表示该字符串的第二个字符元素的地址前加*,, 表示获取该字符串的第二个字符元素
        return 0;
    }

     还有疑问:如何求*str1[]中每个字符串的长度?

  • 相关阅读:
    6174问题
    阶乘的精确值
    小学生算术
    Primer回顾 数组和指针
    Primer回顾 标准库类型
    绪论
    字符串的存储
    条款39:明智而审慎的使用private继承
    条款34:区分接口继承和实现继承
    条款33:避免遮掩继承而来的名称
  • 原文地址:https://www.cnblogs.com/ningqian/p/13440702.html
Copyright © 2011-2022 走看看