指针的深度剖析

深度剖析指针

指针和指针变量:

在C语言中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为"指针"。意思是通过它能找到以它为地址的内存单元。
指针变量和指针
在这里插入图片描述
将一个变量的地址称为变量的指针,存放变量a的内容的存储单元首地址就是变量a的指针。存放指向地址的变量叫做指针变量。存放变a的指针的变量p是指针变量。
指针变量
指针变量的数据类型不代表本身的数据类型而是指他所指向的变量的数据类型。因为吧目标变量的字节大小是不同的,所以指针变量只能指向某个变量的单元首地址。
指针变量的定义

#define _CRT_SECURE_NO_WARNINGS 1
#include"stdio.h"
void main()
{
	int a, b;
	int *point1, *point2;
	a = 20, b = 200;
	point1 = &a, point2 = &b;
	printf("%d,%d\n", a, b);
	printf("%d,%d", *point1, *point2);
}

在这里插入图片描述
运算结果:

在这里插入图片描述

指针数组和数组指针

数组指针
定义:指向数组的指针。
example:
在这里插入图片描述
在这里插入图片描述
数组指针的使用:
利用数组指针求给定n*n矩阵的转置矩阵,并计算对角线元素之和。

#define _CRT_SECURE_NO_WARNINGS 1
#include"stdio.h"
#define N 4
void main()
{
	int a[N][N], (*p)[N];
	int i, j, t, s = 0;
	printf("input a:\n");
	for (i = 0; i < N; i++)
	{
		printf("input the %dth row:\n", i + 1);
		for (j = 0; j < N; j++)
		{
			scanf("%d", &a[i][j]);
		}
		p = a;
		for (i = 0; i < N; i++)
		{
			s += *(*(p + i) + i);
			for (j = i + 1; j < N; j++)
			{
				t = *(*(p + i) + j);
				*(*(p + i) + j) = *(*(p + j) + i);
				*(*(p + j) + i) = t;
			}
		}
		for (i = 0; i < N; i++)
		{
			for (j = 0; j < N; j++)
				printf("%4d", *(*(p + i) + j));
			printf("%d\n");
		}
	}
	printf("s=%d\n", s);
}

指针数组:
定义:因为指针也是一种数据类型,所以相同类型的指针变量也可以构成指针数组,在指针数组中每一个元素都是一个指针变量,并且指向同一数据类型。
形式:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值