指针数组与数组指针
前言:
对于c语言初学者对这两个概念常常弄混,我当时刚学时,去看大佬博客,大佬们写的很多,强忍着看完了,觉得自己看懂了,接着就下一个知识点了,过了两天又忘了。。。编程的学习绝对是不能脱离实际的,实践是检验真理的唯一标准,所以检验自己到底会不会直接写代码检验一下是最好的(这里可不是让你背博客代码,也不是让你抄写,而是看会了之后用自己的方式实现一下,不看任何参考代码)。下面我将用代码的形式清晰的给你展示这两者的区别!
指针数组:
定义:类型 *名字[数组大小],如char *p[6];
首先看一下这个结构,看到有’[ ]'符号,这是一个数组你应该没有疑问,数组的元素是啥呢?是char *指针。你可以对比正常数组来看,如 int arr[6],这你肯定知道,这是一个大小为6的数组,数组里存储的元素类型为int类型。这样你再看 char *p[6],是不是就清晰多了。这是一个大小为6的数组,里面存储的是char *类型的指针,数组名字是p。ok,这回我们知道什么是指针数组了!啥你说你还不清楚!世上无难事,只要肯放弃,咱不学编程了!好的,既然你懂什么是指针数组,那么就和我一起来编程吧!
#include <stdio.h>
int main(int argc, char **argv)
{
char *p[6];
p[0] = "hello";
printf("p[0] = %s\n", p[0]);
return 0;
}
我相信上面的代码你应该没有问题,给指针数组里的第一个指针赋值为“hello"。打印结果是hello。接下来我们继续学习
#include <stdio.h>
int main(int argc, char **argv)
{
char arr[2][6] = {"hello", "world"};
char *p[2];
p[0] = arr[0];
printf("p[0] = %s\n", p[0]);
printf("p[1] = %s\n", p[1]);
p[1] = arr[1];
printf("p[1] = %s\n", p[1]);
return 0;
}
我们换个赋值方式
#include <stdio.h>
int main(int argc, char **argv)
{
char arr[2][6] = {"hello", "world"};
char *p[6];
*p = *arr;
p[1] = arr[1];
printf("*p = %s\n", *p);
printf("*p+1 = %s\n", *p+1);
printf("*(p+1) = %s\n", *(p+1));
printf("*(p+1)+2 = %s\n", *(p+1)+2);
return 0;
}
学到这里我相信你对指针数组已经有了较深刻的理解了,那么现在自己实践一下!实践完成之后,接下来我们学习一下数组指针!
数组指针
定义:类型 ( *名字)[数组大小], 如:char ( *p)[10];
首先看结构,看到有’[ ]'符号,这是一个数组你应该没有疑问,数组的元素是啥呢?是char类型,p是指针,指向包含10个char元素的一维数组。
#include <stdio.h>
int main(int argc, char **argv)
{
char arr[2][6] = {"hello", "world"};
char (*p)[6];
p = (char(*)[6])arr;
printf("*p = %s\n", *p);
printf("*p+1 = %s\n", *p+1);
printf("*(p+1) = %s\n", *(p+1));
printf("*p[1] = %c\n", *p[1]);
printf("*p[1]+2 = %c\n", *p[1]+2);
printf("*(p[1]+1) = %c\n", *(p[1]+1));
return 0;
}
通过上面的代码我相信你肯定对数值指针有了较深刻的认识,就现在去用代码写一下吧!
总结
- 指针数组:本质上是数组,数组里面存储是指针
- 数组指针:本质上是指针,指针指向一个一维数组
本人能力有限,如有错误望各位大佬不吝指正,原创不易,转载请注明出处!
|