指针
指针变量(通常也叫指针)是个变量,存放内存单元的地址;
指针是个地址;
指针的大小在32位平台是4个字节,在64位平台是8个字节
#include<stdio.h>
int main()
{
int a=0; //在内存中开辟一块空间
int *p=&a;//取地址可以用&操作符,将a的地址存放在p中,p是一个指针变量
return 0;
}
指针的定义方式是:类型+*
char* 类型的指针存放char类型变量的地址;
short* 类型的指针存放short类型变量的地址;
int 类型的指针存放int类型变量的地址;
(指针的类型决定了对指针解引用的时候能操作几个字节。比如:char * 的解引用只能访问一个字节,而int * 的解引用能访问四个字节)
*p+1=sizeof(type)
指针+1看起来是+1,其实是加上其所指向类型的大小;
两个指针相减代表两指针之间元素的个数,元素由两个指针类型决定;
指针的解引用: * p代表指针所指向的目标
二级指针
存放一级指针地址的变量称为二级指针
二级指针的应用:
**ppa先通过*ppa找到pa,然后对pa进行解引用操作:pa,找到的是a.
**ppa=30;
//等价于pa=30;
//等价于a=30;
指针和数组
(指针和数组没有关系)
数组名表示的是数组首元素的地址;
#include<stdio.h>
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,0};
printf("%p\n",arr); //输出数组首元素的地址
printf("%p\n",&arr[0]); //输出数组首元素的地址
return 0;
}
规定:
允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但不允许与指向第一个元素之前的那个内存位置的指针进行比较。
int arr[10]={1,2,3,4,5,6,7,8,9,0}
int *p=arr; //p存放的是数组首元素的地址
指针数组
指针数组是存放指针的数组,数组里的元素是一个个指针;
int* arr1[5] //数组名为arr1的数组里存放了5个整型指针
// *p+1=sizeof (type)
#include<stdio.h>
#include<Windows.h>
int main()
{
int n = 10;
char *pc = (char*)&n;
int *pi = &n;
printf("%p\n", &n);//&n
printf("%p\n", pc);//&n
printf("%p\n", pc+1); //&n+1
printf("%p\n", pi);//&n
printf("%p\n", pi+1);//&n=4
system("pause");
return 0;
}
00E3F82C
00E3F82C
00E3F82D
00E3F82C
00E3F830
请按任意键继续. . .