指针数组和数组指针的区别与联系—引用和指针(二)

目录

 

指针数组和数组指针的区别与联系

指针数组

数组指针


指针数组和数组指针的区别与联系

  • 指针数组:是一个数组,并且,数组中的每个元素存放都是指针
  • 数组指针:是一个指针,并且指向了一个数组

先举个例子:

一个有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)”分别代表了不同的含义,不同的一级指针和二级指针的变化,来切换是指向下一个字符还是下一个字符串。

发布了271 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_17846375/article/details/104947829