-------------------------------------资源来源于网络,仅供自学使用,如有侵权,联系我必删.
第一:
指针的作用
#include <stdio.h>
int main()
{
int i = 5;
int* p = &i; //指针p
printf("%d, %08X\n", i, p);
//i= 10;
*p = 10;
printf("%d, %08X\n", i, p);
return 0;
}
第二:
指针本质
指针在本质上也是一个变量
指针需要占用一定的内存空间
指针用于保存内存地址的值
第三:
* 号的意义
在指针声明时 ,* 号表示所声明的变量为指针
在指针使用时 , * 号表示取指针所指向的内存空间中的值
*号类似一把钥匙,通过这把钥匙可以打开内存,读取内存中的值
//指针声明
int i = 0;
int j = 0;
int* p = &i;
//取值
j = *p;
第四
1. 指针占用的内存空间
2. 指针的地址
3. 通过*号写内存
#include <stdio.h>
int main()
{
int i;
//指针
int* pI;
char* pC;
float* pF;
//通过取地址符&让 pI指向i
pI = &i;
//pI所保存的值 i的地址值 变量i目前所保存的值
printf("%0X, %0X, %d\n", pI, &i, i);
//指针类型int*的大小 变量pI的大小 pI的地址
printf("%d, %d, %0X\n", sizeof(int*), sizeof(pI), &pI);
//指针类型char*的大小 变量pC的大小 pC的地址
printf("%d, %d, %0X\n", sizeof(char*), sizeof(pC), &pC);
//指针类型float*的大小 变量pF的大小 pF的地址
printf("%d, %d, %0X\n", sizeof(float*), sizeof(pF), &pF);
return 0;
}
第五:
1.形参与实参的区别
形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。
实参出现在主调函数中,进入被调函数后,实参变量也不能使用。
举例:
1. 比如你定义一个函数void add(int a, int b),这里的a和b就是形参。
2. 当你进行函数调用的时候,add(1, 2),这里的1和2就是实参。
2.传值调用与传址调用
? 指针是变量 , 因此可以声明指针参数
? 当一个函数体内部需要改变实参的值 , 则需要使用指针参数
? 函数调用时实参值将复制到形参
? 指针适用于复杂数据类型作为参数的函数中
利用指针(传址调用)实现变量交换函数
#include <stdio.h>
#define SWAP(a,b) {int t=a; a=b; b=t;}
void swap(int* a, int* b)
{
int t=*a;
*a=*b;
*b=t;
}
int main()
{
//这里需要交换sawp()函数外部i和j的值,则需要用到指针的 传址调用
int i = 1;
int j = 2;
printf("i=%d,j=%d\n",i, j);
swap(&i,&j);//传址调用,用到取地址符
printf("i=%d,j=%d\n",i, j);
return 0;
}
指针小结
? 指针是C 语言中一种特别的变量
? 指针所保存的值是内存的地址
? 可以通过指针修改内存中的任意地址内容