解释C语言中的指针和一维数组
指针是一个存储另一个变量地址的变量。
特性
指针的特性解释如下:
- 指针节省内存空间。
- 由于直接访问内存位置,指针的执行速度更快。
- 借助指针,可以高效地访问内存,即动态分配和释放内存。
- 指针用于数据结构。
指针的声明、初始化和访问
考虑以下语句:
int qty = 179;
在内存中,变量可以表示如下:
声明指针
这意味着“p”是一个指针变量,它保存另一个整型变量的地址,如下所示:
Int *p;
指针的初始化
地址运算符 (&) 用于初始化指针变量。
例如:
int qty = 175; int *p; p= &qty;
通过指针访问变量
要访问变量的值,使用间接运算符 (*)。
例如:
这里,‘*’可以理解为地址上的值。
以下语句等效于上述两个语句:
p = &qty; n = *p; n =qty
指针和一维数组
- 编译器为数组的所有元素分配连续的内存位置。
- 基地址 = 数组的第一个元素地址(索引 0)。
- 例如:int a [5] = {10, 20, 30, 40, 50};
元素
五个元素存储如下:
如果 'p' 声明为整型指针,则可以使用以下赋值语句让数组 'a' 指向它:
p = a; (or) p = &a[0];
可以使用 p++ 来访问 'a' 的每个值,从而从一个元素移动到另一个元素。当指针递增时,其值会增加它指向的数据类型的尺寸。这个长度称为“比例因子”。
‘p’ 和 'a' 之间的关系解释如下:
P = &a[0] = 1000 P+1 = &a[1] = 1004 P+2 = &a[2] = 1008 P+3 = &a[3] = 1012 P+4 = &a[4] = 1016
可以使用元素的索引和数据类型的比例因子来计算元素的地址。这里给出一个例子来解释这一点。
Address of a[3] = base address + (3* scale factor of int) = 1000 + (3*4) = 1000 +12 = 1012
可以使用指针访问数组元素,而不是使用数组索引。
*(p+3) 给出 a[3] 的值。
a[i] = *(p+i)
示例程序
以下是 C 语言指针和一维数组的程序:
#include<stdio.h> main ( ){ int a[5]; int *p,i; printf ("Enter 5 lements"); for (i=0; i<5; i++) scanf ("%d", &a[i]); p = &a[0]; printf ("Elements of the array are"); for (i=0; i<5; i++) printf("%d", *(p+i)); }
输出
执行上述程序后,将产生以下结果:
Enter 5 elements : 10 20 30 40 50 Elements of the array are : 10 20 30 40 50
广告