指针的概念:在计算机中数据式存储在存储器中的,存储器的一个字节称为一个内存单元,不同的系统不同的数据类型它所占据的内存单元不是同的,在64位的系统里,一个整型占据4个字节,一个字符占据1个字节,为了方便访问内存单元,每一个内存单元都有一个编号,这个编号也叫地址,通过地址可以找到相应的内存单元,所以我们就称这个地址为指针。所以说指针实际就是内存的编号或者说是地址。
指针访问变量:在没有学到指针之前我们修改一个变量一般是这么做的:
1 int a = 5; 2 3 a = 8;
第一行代码是定义个整型变量a并初始化将(这里系统会把变量名a转化为变量的地址),第三行是访问a所指向的地址修改相应的值,这种通过变量名引用变量,由系统自动完成变量名和其存储地址之间的转换,称为变量的"直接引用"方式。
指针变量的定义的一般形式:
类型标识符 *指针变量名
- 类型标识符说明了这个指针变量所指向的变量类型,不能指向为其他类型
- 变量名前面的“*”只是一个指针说明符,不是指针变量名的一部分
int *p1; //指向int类型数据的一个指针变量p1 float *p2; //指向float类型数据的一个指针变量p2 char *p3; //指向char类型数据的一个指针变量p3
指针如何访问变量:
1 int a = 8; 2 3 int *p; 4 5 p = &a; 6 7 *p = 9;
第5行代码是取到变量a的地址赋值给指针p,这样p就指向了变量a,第7行代码是将9赋值给p所指向的内存单元,这里的“*”是指针运算符,与第三行的“*”有着完全不同的意义。如果省略掉这第7行的*,就相当于把9赋值给指针p,这是不允许的,因为指针变量是用来存放变量地址的,不要给它随意赋值一个常数。
指针定义的同时可以初始化(上述代码的第5行和第7行可以合并为一行)
1 int *p = &a;
指针的使用注意:
- 指针变量在没有指向任何变量之前禁止赋值
1 //错误代码 2 int *p; 3 4 *p = 9;
- 指针变量的类型一定要和其所指向变量的类型一致
1 //错误代码 2 int a = 9; 3 4 float *p; 5 6 p = &a;
- 指针变量的存储和其他变量的存储一样也会占用一定大小的内存单元
1 #include<stdio.h> 2 3 int main(){ 4 5 int *p1; 6 char *p2; 7 8 printf("%ld----%ld\n",sizeof(p1),sizeof(p2)); 9 }
运行的结果为:
c中指针变量所占用的内存大小都是8个字节,无论该指针变量是指向int类型的还是char类型的
指针的简单应用:要求:通过函数的调用实现变量a与变量b的值互换
1 //错误代码 2 #include<stdio.h> 3 //交换a与b值的函数 4 void swap(int a,int b){ 5 int temp; 6 temp = a; 7 a = b; 8 b = temp; 9 } 10 int main(){ 11 12 int n1 = 4; 13 int n2 = 6; 14 15 swap(n1,n2); //调用交换函数 16 printf("%d----%d\n",n1,n2); 17 return 0; 18 }
你会发现程序的运行结果不是你想要的效果,主要是因为函数的形参只是数值的传递,形参数值的改变并不能改变实参的数值
示意图
时间: 2024-10-08 20:26:23