目录
指针数组和数组指针的区别与联系
- 指针数组:是一个数组,并且,数组中的每个元素存放都是指针
- 数组指针:是一个指针,并且指向了一个数组
先举个例子:
一个有10个指针的数组:
int *a[10];
一个指向有10个整型数字数组的指针:
int(*a)[10];
指针数组
#include <stdio.h>
#include <iostream>
int main()
{
int a = 1;
int b = 2;
int c = 3;
int *x[3];
x[0] = &a;
x[1] = &b;
x[2] = &c;
for (int i = 0; i <3; i++)
{
printf("指针:%d, 值:%d\n", x[i], *x[i]);
}
system("pause");
return 0;
}
运行如下:
数组指针
我之前一直在想数组指针的应用场景该是什么呢?因为感觉定制C++规则的大佬,专门定义一个针对数组的指针,不知道有啥用,经过对示例的推演,明白了,看来数组指针和指针数组连用到一块儿还真有用,比如,在一个数组中放入若干字符串,那么,每个字符串是数组中的元素,我该怎样快捷的提取数组中任意一个字符串呢?又该如何快捷的提取到字符串中的任意一个字符呢?而这正是数组指针所实用的场景:
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
const char *str[4] = {"Welcome","to","Fortemedia","Nanjing"}; //定义了一个指针数组,但里面没有存放指针变量,而是字符串。
const char **p = str;//定义一个指向指针数组的数组指针
printf("指针指向数组的首字符:%c\n",**p);
printf("指针指向当前字符的在ascaⅡ码中的下一个:%c\n", **p + 1);
printf("指针指向第二个字符串的首字符:%c\n", **(p + 1));
printf("指针指向第二个字符串:%s\n", *(p+1));
system("pause");
return 0;
}
如上的非常接近的"**p"、“**p+1”、“**(p+1)”、“*(p+1)”分别代表了不同的含义,不同的一级指针和二级指针的变化,来切换是指向下一个字符还是下一个字符串。