• 自己的总结


    1 五.指针数组和数组指针
    2 1.指针数组 char *p[3];每个元素都是指针
    3 int main(void)
    4 {
    5     char *p1 = "sadqwdq";
    6     char *p2 = "wqdcd";
    7     char *p3 = "32131";
    8    
    9     char *p[3] = {"sadqwdq","wqdcd","32131"};
    10    
    11     //即这个指针数组可以和上面的指针有这样的对应关系
    12
    13     p[1] = p1;            //因为数组p的每个元素都是指针,所以可以和普通指针进行等价赋值操作。
    14     *(p+2) = p2;
    15     *(p+3) = p3;
    16
    17     "注意下面这种状况,是错误的"
    18     scanf("%s",p[1]);
    19     scanf("%s",p+1);
    20     strcpy(p[1],"sadqw");
    21     strcpy(p+1,"sada");
    22     "原因:因为不管是 p[1] 还是 p+1 都是以个指针,而且是无内存空间,所以不可以往里面写内容。"
    23 }
    24 2.数组指针:是一个指针,指向一个数组
    25 int main(void)
    26 {
    27     char (*p)[10];
    28     char str[3][10] = {"sadwq","casas","1323"};
    29     p = str;        "此时p指向数组的第一行首地址,此时指针具有内存(含一个一维数组,10个char型)"
    30     printf("%s",p+1);    "此时 p+1 是一个指针,指向数组 str 的第二行首地址,而且它具有内存,是10个char型大小,可以进行写入操作"
    31     strcpy("%s",p+1);        "p+1 的内容就会被改变"
    32
    33     "但是它不能进行下述操作"
    34     p+1 = "srqweq";        因为 "srqweq" 是一个常量区字符串,写在等号右边意思是把字符串的首地址赋给它。
    35                         因为 1.指针 p 每次 +1 会跳10个char型,即10个字节。 而常量字符串的指针,是普通字符指针,每次 +1 只会跳 4 会跳10个char型,即10个字节。
    36                         步长不一样,编译器会报错。不能进行赋值。
    37                             2."更重要的是:此时p+1指向二维数组第二行的首地址(含一个一维数组),单纯的地址交换,将使数组的一维数组首地址丢失"
    38
    39
    40 }

  • 相关阅读:
    Sqlite框架Delphi10.3(07)
    FastReport 6.8.11在Delphi10.3上的安装
    Delphi 中,InputQuery 函数的妙用
    Javaday25(sax解析xml,json,设计模式)
    并发学习第五篇——volatile关键字
    并发学习第四篇——synchronized关键字
    并发学习第二篇——Thread
    并发学习第一篇——Runnable
    git-仓库迁移并保留commit log
    并发编程理论基础二——画图理解
  • 原文地址:https://www.cnblogs.com/dpf-learn/p/6108972.html
Copyright © 2020-2023  润新知