C语言指针二

指针和数组

  • 数组名称保存的就是数组首元素的地址
  • 既然数组名称保存的就是地址, 而指针也是用于保存地址的, 所以指针也可以指向数组
int ages[3] = {1, 3, 5};
int *p = &ages;
  • 结论: 如果利用指针保存数组的地址之后, 那么 p = ages = &ages;
// 要求你写出三种访问数组元素的写法
int ages[3] = {1, 3, 5};
printf("ages[0] = %i\n", ages[0]);//1
int *p = ages;
printf("p[0] = %i\n", p[0]);//1
printf("0[p] = %i\n", 0[p]);//1

指针的加减

  • 指针可以进行加减法
    • 应用场景: 一般都是用在指针数组中

    • 指针变量+1是加多少, 加的就是指针变量类型占用的字节数

    • 注意点:

      1. -1操作一般企业开发不会用到
    • 2.只有指针才可以做+1-1操作, 数组名不可以


指针和字符串

  • 字符串的本质就是数组, 所以指针也可以指向字符串,这样定义字符串又多了一种方式

定义:

    char str1[] = {'x', 'x', 'z', '\0'};
    char str2[] = "xxz";
    char *str4 = "xxz";
  • 利用数组和指针定义字符串的区别
  1. 存储的位置不同

    • 如果是通过数组定义的字符串, 那么存储在内存的栈中

    • 如果是通过指针定义的字符串, 那么存储在内存的常量区中

  2. 由于在内存中存储的位置不一样, 所以特性也不一样

    • 如果是通过数组定义的字符串, 我们是可以手动修改

    • 如果是通过指针定义的字符串, 我们不能手动修改

  3. 由于在内存中存储的位置不一样, 所以特性也不一样

    • 如果是通过数组定义的字符串, 每次定义都会重新开辟存储空间

    • 如果是通过指针定义的字符串, 重复定义不会重新开辟存储空间

C语言指针二_第1张图片

字符串数组的第二种形式

  • 字符串数组的第二种格式
    char *str[] = {
        "lnj",
        "abc",
        "def"
    };

你可能感兴趣的:(C语言指针二)