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[]中每个字符串的长度?

原文地址:https://www.cnblogs.com/ningqian/p/13440702.html