C - 指针和一维数组

时间:2020-02-23 14:31:58  来源:igfitidea点击:

在本教程中,我们将学习使用C编程语言中的指针使用一维阵列。

我们已经了解了如何使用阵列教程中的数组。
所以,让我们使用该知识并向它添加指针。

创建一维数组

为了保持简单的事情,我们将首先创建一个维度字符 char尺寸6.

//1D char array
char str[6] = "Hello";

我们创建数组时发生了三件事。

  • 为阵列分配了6个内存位置块。

  • 数组的字符存储在该6个内存块中。

  • 变量名称 str在阵列的分配内存位置的第一个位置点点。

在上图中,我们具有大小6的一维字符阵列和阵列的每个元素的存储器位置。

打印一维数组的元素

首先,我们将使用数组索引和 for循环打印数组的元素。

我们将继续打印字符,直到我们击中 \0标记字符串末尾的空字符。

int i;
char str[6] = "Hello";
for (i = 0; str[i] != '
//array
char str[6] = "Hello";
//pointer
char *ptr = str;
'; i++) { printf("%c\n", str[i]); }

为一维数组创建指针变量

我们将创建一个字符指针 ptr将包含字符数组地址的变量 str

//char array
char str[6] = "Hello";
//pointer
char *ptr = str;
//print the characters
while(*ptr != '
#include <stdio.h>
int main(void) {
  
  //character array
  char str[6] = "Hello";
  
  //pointer ptr
  //pointing at the character array str
  char *ptr = str;
  
  //print the elements of the array str
  while (*ptr != '
H
e
l
l
o
End of code
') { printf("%c\n", *ptr); //make the pointer ptr point at the //next memory location ptr++; } printf("End of code\n"); return 0; }
') { printf("%c\n", *ptr); ptr++; }

笔记!阵列变量点在阵列的分配内存位置的开始地址处。

在上面的代码中,我们将存储数组的开始地址 str在指针变量中 ptr
所以,阵列str处的ptr点。

递增指针变量

当我们将指针变量递增时,它会根据数据类型的大小指向下一个存储位置。

所以, ptr字符指针变量指向一维字符数组的第一内存位置 str

char数据类型大小为1字节。
因此,如果第一存储器位置为1000并且PTR最初指向该存储器位置 ptr++将制作 ptr可变点在1001内存位置。

同样,如果指针变量是数据类型 int并且让我们说整数的大小是2个字节,那么如果指针最初指向存储器位置1000,那么在使用它的值递增其值之后 ++操作员它将指向保持下一个整数数据的下一个存储器位置1002.

通过指针打印一维数组元素

我们已经存储了一维字符数组的开始地址 str在字符指针变量中 ptr

现在,使用 ++递增操作员我们将访问数组的元素。

//address of 0th index element of str
str[0] = baseAddress + (i x size_of_data_type)
       = 1000 + (0 x 1)
       = 1000
//address of 1st index element of str
str[1] = 1000 + (1 x 1)
       = 1001
//address of 5th index element (last element) of str
str[5] = 1000 + (5 x 1)
       = 1005

完整的代码

##代码## ##代码##

地址映射

要获取一维数组的iTh元素,我们可以使用以下公式。 arr[i] = baseAddress + (i x size_of_data_type)其中: baseAddress是阵列的起始地址。 size_of_data_type是数据类型的大小。

例如,如果我们使用 char类型然后,大小为1字节。
如果我们正在使用 int类型然后,大小为2字节。

如果我们考虑一维字符数组 str大小6.

然后,baseaeaddress = 1000和size_of_data_type = 1

##代码##