指针初阶(2)

文章目录

    • [5. 指针和数组](#5. 指针和数组)
    • [6. 二级指针](#6. 二级指针)
    • [7. 指针数组](#7. 指针数组)
  • 附:

5. 指针和数组

指针变量:指针变量就是指针变量,不是数组,指针变量的大小是4/8个字节,专门是用来存放地址的。
数组:数组就是数组,不是指针,数组是一块连续的空间,可以存放1个或者多个类型相同的数据。

两者之间的联系:

数组中,数组名其实是数组首元素的地址,数组名 == 地址 == 指针

当我们知道数组首元素的地址的时候,因为数组又是连续存放的,所以通过指针就可以遍历访问数组

数组是可以通过指针来访问的

c 复制代码
#include <stdio.h>

int main()
{
	int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	int* p = arr;

	for (i = 0; i < sz; i++)
	{
		//printf("%p == %p\n", p + i, &arr[i]);
		printf("%d ", *(p + i));
	}

	return 0;
}

6. 二级指针

指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里?

这就是二级指针。

c 复制代码
#include <stdio.h>

int main()
{
	int a = 10;
	int* p = &a;//p是一级指针变量,指针变量也是变量,变量是在内存中开辟空间的,是变量就有地址
	int** pp = &p;//pp就是二级指针变量,二级指针变量就是用来存放一级指针变量的地址
	
	//*(*pp) = 100;
	**pp = 100;
	printf("%d\n", a);

	//int** * ppp = &pp;

	return 0;
}

举个例子:

c 复制代码
int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "hello world";
	char arr3[] = "cuihua";

	char* parr[] = { arr1, arr2, arr3 };

	char** p = parr;

	return 0;
}

7. 指针数组

指针数组是指针还是数组?

答案:是数组,是存放指针的数组。

数组我们已经知道整形数组,字符数组,那指针数组是怎样的?

c 复制代码
#include <stdio.h>

int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "hello world";
	char arr3[] = "cuihua";

	//指针数组
	char* parr[] = { arr1, arr2, arr3 };
	int i = 0;

	for (i = 0; i < 3; i++)
	{
		printf("%s\n", parr[i]);
	}


	/*char arr[] = "abcdef";
	printf("%s\n", arr);*/

	return 0;
}
c 复制代码
#include <stdio.h>

int main()
{
	int arr1[] = { 1, 2, 3, 4, 5 };
	int arr2[] = { 2, 3, 4, 5, 6 };
	int arr3[] = { 3, 4, 5, 6, 7 };

	//指针数组
	int* parr[] = { arr1, arr2, arr3 };
	
	int i = 0;

	for (i = 0; i < 3; i++)
	{
		int j = 0;

		for (j = 0; j < 5; j++)
		{
			printf("%d ", parr[i][j]);
			//printf("%d ", *(parr[i] + j));//和上面等价
		}

		printf("\n");
	}

	return 0;
}

附:

指针初阶(1)

相关推荐
千码君201630 分钟前
Go语言:解决 “package xxx is not in std”的思路
开发语言·后端·golang
Ypuyu36 分钟前
【GoLang】【框架学习】【GORM】4. 使用 BeforeUpdate hook 操作时,出现反射报错
开发语言·学习·golang
ZIM学编程1 小时前
「学长有话说」作为一个大三学长,我想对大一计算机专业学生说这些!
java·c语言·数据结构·c++·python·学习·php
maizeman1261 小时前
用R语言生成指定品种与对照的一元回归直线(含置信区间)
开发语言·回归·r语言·置信区间·品种测试
脚踏实地的大梦想家1 小时前
【Go】P17 Go语言并发编程核心:深入理解 Goroutine (从入门到实战)
java·开发语言·golang
贝塔实验室1 小时前
LDPC 码的构造方法
算法·fpga开发·硬件工程·动态规划·信息与通信·信号处理·基带工程
初学小白...2 小时前
线程同步机制及三大不安全案例
java·开发语言·jvm
Greedy Alg2 小时前
LeetCode 287. 寻找重复数
算法
2501_938791222 小时前
逻辑回归与KNN在低维与高维数据上的分类性能差异研究
算法·分类·逻辑回归
南方的狮子先生2 小时前
【深度学习】60 分钟 PyTorch 极速入门:从 Tensor 到 CIFAR-10 分类
人工智能·pytorch·python·深度学习·算法·分类·1024程序员节