深度剖析指针
指针和指针变量:
在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);
}
指针数组:
定义:因为指针也是一种数据类型,所以相同类型的指针变量也可以构成指针数组,在指针数组中每一个元素都是一个指针变量,并且指向同一数据类型。
形式: