关于指针
指针简述
指针的大小是固定的,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变量的地址是 动态 **的
运算结果↓↓
一维数组元素地址和内容的表现形式
↓↓
表示方式 | 功能含义 |
---|---|
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 |