在 C 语言中,数组指针是一种特殊的指针类型,它是一个指向数组的指针。其声明形式为:
<数据类型> (*<指针变量名>)[<数组长度>];
例如,下面声明了一个指向整型数组的指针变量 arrPtr:
int (*arrPtr)[10];
这个数组指针变量 arrPtr 可以指向一个已有的数组。
数组指针可以用来进行数组的访问。我们可以使用指针访问数组元素,也可以将指针作为函数参数传递来实现数组的传递。
下面是一些使用数组指针的示例代码:
1. 使用指针访问数组元素:
int arr[3][2] = { {1, 2}, {3, 4}, {5, 6} };
int (*arrPtr)[2] = arr; // 数组指针指向数组的第一行
printf("%d\n", arrPtr[1][0]); // 输出第二行第一列的元素 3
在这个例子中,数组 arr 是一个 3 行 2 列的二维数组,然后定义了一个数组指针 arrPtr,将其指向数组 arr 的第一行。
使用指针访问数组元素的方式是 arrPtr [ i ] [ j ],其中 i 和 j 分别表示要访问的行和列。
2. 将指针作为函数参数传递:
void printArr(int (*arrPtr)[2], int n) {
for (int i = 0; i < n; i++) {
printf("%d %d\n", arrPtr[i][0], arrPtr[i][1]);
}
}
int main() {
int arr[3][2] = { {1, 2}, {3, 4}, {5, 6} };
int (*arrPtr)[2] = arr;
printArr(arrPtr, 3); // 传递数组指针和数组长度
return 0;
}
在这个例子中,定义了一个名为 printArr 的函数,其参数 arrPtr 是一个数组指针,代表一个二维整型数组,n 是该数组的长度。
在 main 函数中,定义了一个二维数组 arr 和一个数组指针 arrPtr,并将其传递给函数 printArr,函数内部可以使用指针访问数组元素,实现数组的遍历与输出。
下面我们来看看“几道”例题:
题目1:编写自定义函数int my_strlen(char s[]); 检测字符串s的长度。
要求:不使用string.h中的标准库函数strlen。
例子:
输入:
abc
输出:
3
这道题可以先这样,再那样,最后就得出了结果。(bushi)
先上代码!
#include <stdio.h>
int my_strlen( char s[] )
{
int i,n=0;
for(i=0;;i++)
{
if(s[i]=='\0')
break;
n++;
}
return n;
}
int main( )
{
char s[100];
gets(s);
printf("%d\n",my_strlen(s) );
}
分析:
代码中定义了一个名为 my_strlen 的函数,该函数的参数是一个字符数组(字符串)。
函数体中使用循环逐个遍历字符,当遇到字符串的结束符 ‘\0’ 时,退出循环。
循环的计数器 i 就是字符串的长度,最后将其作为函数的返回值。
最后,输出结果如下图:
题目2:编写自定义函数char *my_strcpy(char s1[],char s2[]);
要求:将字符串s2复制到s1,返回值为s1(不使用string.h中的标准库函数)。
例子:
输入:
how are you?
输出:
how are you?
先上代码!
#include<stdio.h>
char *my_strcpy(char s1[],char s2[])
{
int i=0;
while (s2[i]!='\0')
{
s1[i]=s2[i];
i++;
}
s1[i]='\0';
return s1;
}
int main()
{
char s[100] , t[100];
gets(s);
printf("%s\n",my_strcpy(t,s) );
}
分析:
这道题要求实现一个自定义函数 my_strcpy,用于将一个字符串 s2 复制到另一个字符串 s1 中,并返回 s1。
函数的参数s1和s2都是字符数组(也就是字符串),因此可以通过遍历数组逐个复制字符的方式来实现字符串的复制操作。
在函数体中,使用循环逐个遍历字符串 s2 中的字符,并逐个复制到字符串 s1 中。循环终止的条件是遍历到字符串结束符 ‘\0’。最后,将字符串结束符添加到 s1 的末尾,并返回 s1。
最后,输出结果如下图: