关于指针

指针简述

指针的大小是固定的,win32 是4,win64 是8!! 对于一个存储单元来讲,单元的地址就是指针。 一个指针是一个地址,是一个常量。而一个指针变量却可以赋予不同的指针值,是变量

指针变量

指针变量:为了表示指针变量与它指向的变量间的关系,C语言中用“ * ”符号表示“指向”。Eg:p表示指针变量,那*p是p所指向的变量。

指针运算符

指针运算符:“ & ” , “ * ” “&”取地址运算符:取变量在内存中的地址。 “ * ”指针运算符:指针变量所指的对象。 而定义指针变量时的 * 标明变量是指针类型的变量。注意:在指针定义时 * 表示指向(标识);在指针运算时 * 表示取该指针对应的值(不是地址而是地址单元的值 )

Eg:

#include<stdio.h>
int main()
{
	int a = 20;
	int *pa = &a;	
	//指针变量pa指向变量a,a是pa的指向对象,可以用*pa来引用a,*pa与a是等价的。
	printf("a=%d\n",a);					//输出变量a的值
	printf("*pa=%d\n", *pa);			//输出变量a的值
	printf("a变量地址=%ld\n", pa);		//输出变时a的地址,由操作系统分配
	printf("a变量地址=%ld\n", &a);		//输出变时a的地址,由操作系统分配
	return 0;
}

↑ ↑ 说明 : *a与 pa 是等价的pa与&a是等价的,变量a的地址是由 **操作系统 **分配的,不同的操作系统分配的地址值不同,因此a变量的地址是 **动态 **的

运算结果↓↓ jieguo1

一维数组元素地址和内容的表现形式

↓↓

表示方式 功能含义
a、&a[0] 数组首地址,即a[0]的地址
&a[i]、a+i、pa+i 数组元素i的地址,即a[i]的地址
a[i]、*(a+i)、*(pa+i)、pa[i] 数组元素i的值,即a[0]的内容

二维数组a的性质

↓↓

表示形式 含义 地址
a 二维数组名;指向一维数组 a[0]即第0行首地址 8000
a[0],*(a+0),*a 第0行第0列元素地址 8000
a+1,&a[1] 第1行首地址 8016
a[1],*(a+1) 第1行第0列a[1][0]的地址 8016
a[1]+2,*(a+1)+2,&a[1][2] 第1行第2列a[1][2]的地址 8020
*(a[1]+2),*(*(a+1)+2,a[1][2]) 第1行第2列a[1][2]的 元素6