C 语言中的指针和数组
在开始学习 C 语言中的指针和数组之前,请先了解以下主题:
当 C 语言中的数组被声明时,编译器分配足够的内存来包含它的所有元素。它的基址也是由编译器分配的。
声明一个数组arr
,
int arr[5] = { 1, 2, 3, 4, 5 };
假设arr
的基址为 1000,每个整数需要两个字节,这五个元素将存储如下:
变量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
语法:
*(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"
};
在第二种方法中,内存浪费更多,因此在这种情况下最好使用指针。
建议教程: