#include<stdio.h>
#include<stdlib.h>
/**
指针 就是内存地址
内存地址 就是指针
指针就是地址,地址就是指针
地址就是内存单元的编号
指针变量是存放地址的变量
指针和指针变量是两个不同的概念
但是要注意 通常叙述会把指针变量简称为指针 实际含义不同
**/
/*
更换地址 值 方法:
*/
void sitch(int* a,int* b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}
main(){
//定义一个 int类型变量 i 并且赋值为10
int i = 10;
//定义一个 int 类型的一级指针变量p
int* p;
//把 i对应的地址赋值给 p变量
p = &i;
//指针取值:*p :把 p变量对应的地址的值取出来:
printf("i = %#x\n",&i); //对应的地址 16进制输出
printf("p = %#x\n",p);
i = 200;
printf("p = %#x\n",p); // 对应的地址的值
printf("*p = %d\n",*p); // 对应的地址的值
//-----------**互换两个数字** ----------------
int a=100,b=200,temp =0;
//普通方式 互换:
temp = a;
a = b;
b = temp;
printf("a=%d,b=%d\n",a,b);
//更换地址 方法:
sitch(&a,&b);
printf("a=%d,b=%d\n",a,b);
//-------------------**多级指针:**----------------------------
// 定义一个 int类型的变量i 赋值为100
int j = 100;
//定义一个 int类型的一级指针变量 address1 并且把i的地址赋值给它
int* address1 = &j;
//定义一个 int类型的二级指针 address2 并且把 address1 对应的 地址赋值给他
int** address2 = &address1;
//定义一个三级指针
int*** address3 = &address2;
//定义一个四级指针
int**** address4 = &address3;
// address1=0x62fe28
// address2=0x62fe20
// address3=0x62fe18
// address4=0x62fe10
printf("address1=%#x\n",address1);
printf("address2=%#x\n",address2);
printf("address3=%#x\n",address3);
printf("address4=%#x\n",address4);
// address1=100
// address2=100
// address3=100
// address4=100
printf("address1=%d\n",*address1);
printf("address2=%d\n",**address2);
printf("address3=%d\n",***address3);
printf("address4=%d\n\n",****address4);
//--------------------数组-------------------
/*
数组:
1,数组的取值
2,数组的取地址
3,数组是一块 连续的内存地址空间
4,数组的设计
5,数组的首元素和数组的地址是相同的
*/
char cArray[] = {'H','E','L','L','O'};
int iArray[] = {5,4,3,2,1};
//取数组的值: H E 5 4
printf("cArray[0] = %c\n",cArray[0]);
printf("cArray[1] = %c\n",cArray[1]);
printf("iArray[0] = %d\n",iArray[0]);
printf("iArray[1] = %d\n\n",iArray[1]);
//取内存地址值: int 为4个字节 是一块连续的内存空间
// cArray[0]地址 = 6487520
// cArray[1]地址 = 6487524
// cArray[2]地址 = 6487528
// cArray[3]地址 = 6487532
printf("cArray[0]地址 = %#x\n",&cArray[0]);
printf("cArray[1]地址 = %#x\n",&cArray[1]);
printf("cArray[2]地址 = %#x\n",&cArray[2]);
printf("iArray[0]地址 = %#x\n",&iArray[0]);
printf("iArray[1]地址 = %#x\n",&iArray[1]);
printf("iArray[2]地址 = %#x\n",&iArray[2]);
printf("iArray[3]地址 = %#x\n\n",&iArray[3]);
//用 指针取值:
printf("iArray == %d\n",*iArray);
printf("iArray[0]== %d\n",*iArray+0); //对应值 +1
printf("iArray[1]== %d\n",*iArray+1); //对应值 +1
printf("iArray[2]== %d\n",*iArray+2); //对应值 +1
printf("iArray[3]== %d\n",*iArray+3); //对应值 +1
printf("iArray[0]== %d\n",*(iArray+0));
printf("iArray[1]== %d\n",*(iArray+1));
printf("iArray[2]== %d\n",*(iArray+2));
printf("iArray[3]== %d\n",*(iArray+3));
//---------------用户输入一个数组 并打印出来:------------------------
printf("请输入数组的长度:\n") ;
int length;
scanf("%d",&length);
printf("您输入的数组长度为:%d\n",length);
//2,根据用户输入数组长度 创建数组
int hArray[length];
int k;
for(k=0;k<length;k++){
printf("请输入hArray[%d]的值:\n",k);
scanf("%d",&hArray[k]);
}
//打印数组
for(k=0;k<length;k++){
printf("hArray[k]=%d,",hArray[k]);
}
system("pause");
}