C 语言中的指针和数组

原文:https://www.studytonight.com/c/pointers-with-array.php

在开始学习 C 语言中的指针和数组之前,请先了解以下主题:

当 C 语言中的数组被声明时,编译器分配足够的内存来包含它的所有元素。它的基址也是由编译器分配的。

声明一个数组arr

int arr[5] = { 1, 2, 3, 4, 5 };

假设arr的基址为 1000,每个整数需要两个字节,这五个元素将存储如下:

address of array in C

变量arr会给出基址,是一个常量指针指向arr[0]。因此arr包含arr[0]的地址,即1000

arr有两个目的——

  • 这是数组的名称
  • 它充当指向数组中第一个元素的指针。

arr默认等于&arr[0]

为了更好地理解指针的声明和初始化- 点击这里。参照程序执行。

注:

  • 指针一旦递增,就不能递减。p--行不通。

指向数组的指针

使用指针指向一个数组,然后使用该指针访问数组元素。例如,

#include<stdio.h>

void main()
{
   int a[3] = {1, 2, 3};
   int *p = a;    
   for (int i = 0; i < 3; i++)
   {
      printf("%d", *p);
      p++;
   }
  return 0;
}

1 2 3

Using Array name as pointer in C

语法:

*(a+i)  //pointer with an array

与以下相同:

a[i]

指向多维数组的指针

让我们看看如何使指针指向多维数组。在a[i][j]中,a会给出这个数组的基址,甚至a + 0 + 0也会给出基址,也就是a[0][0]元素的地址。

语法:

*(*(a + i) + j)

指针和字符串

指针用于创建字符串。char类型的指针变量被视为字符串。

char *str = "Hello";

上面的代码创建了一个字符串,并将其地址存储在指针变量str中。指针str现在指向字符串“你好”的第一个字符。

  • 使用char指针创建的字符串可以在运行时被赋值。
char *str;
str = "hello";
  • 可以使用printf()puts()打印字符串的内容。
printf("%s", str);
puts(str);
  • str是字符串的指针,也是字符串的名称。因此我们不需要使用间接运算符*

指针数组

指针在处理具有不同长度行的字符数组时非常有用。

char *name[3] = { 
    "Adam",
    "chris",
    "Deniel"
};
//without pointer
char name[3][20] = { 
    "Adam",
    "chris",
    "Deniel"
};

Pointer with character array in c

在第二种方法中,内存浪费更多,因此在这种情况下最好使用指针

建议教程: