指针
- 什么是指针?
指针=内存地址 - 什么是指针变量?
储存着内存的变量
(平时会把指针变量习惯性的叫做指针) - 指针的作用是什么?
利用*(解引用运算符)可以查询数据(*指针名
)、存储数据(*指针名=数据值
)
#include<stdio.h>
main()
{
//利用指针去获取变量中的数据/存储数据
int a = 10;
//1、定义一个指针去指向变量a
int *p=&a;
//2、利用指针去获取变量中的数据
printf("%d\n",*p);//10
//3、利用指针去存储数据/修改数据
*p =100;
//4、输出打印
printf("%d\n",*p);//100
printf("%d",a);//100
}
-
指针的使用细节?
a.指针变量的名字int * p int : 数据类型(要与指向变量的类型保持一致) * :标记 p : 变量名
b.指针变量的数据类型要跟指向变量的类型保持一致
int a =10; int *p1 =&a; double b=10; doouble *p2=&b;
c.指针变量占用的大小,与数据类型无关,跟编译器有关
32位:4字节 64位:8字节
#include<stdio.h> main() { char c='a'; char * p1=&c; long long n=100; long long * p2 =&n; printf("%zu\n",sizof(p1));//8 4 printf("%zu\n",sizof(p2));//8 4 //x64 : 8 x86: 4 }
d.给指针变量赋值的时候,不能把一个数值赋值给指针变量
正确写法: int a = 10; int * p =&a; //赋值已空间的内存地址 *p=500; 错误写法: int a = 10; int * p =500; //赋值未分配空间的内存地址
-
指针的作用
a.操作其他函数中的变量
b.函数返回多个值
c.函数的结果和计算状态分开
d.方便的操作数组和函数
例题
1、定义两个变量,要求交换变量中记录的值。注意:交换的代码写在一个新的函数swap中。
/*
定义两个变量,要求交换变量中记录的值。注意:交换的代码写在一个新的函数swap中。
*/
##修改前
#include<stdio.h>
main()
{
void swap(int num1,int num2 );
//1、定义两个变量
int a=10;
int b=20;
//2、调用函数swap函数
printf("调用前:%d,%d\n",a,b);//10 20
swap(a,b);
/*
为什么值是一样的?
swap(a,b)仅仅是把a和b中的值传递过去,10交给了num1,20交给了num2,那么此时在swap函数中交换的仅仅交换的是num1和num2里面记录的值,它对调用处a和b里的值是没有影响的
*/
printf("调用后:%d,%d\n",a,b);//10 20
}
void swap(int num1,int num2 )
{
int temp=num1;
num1=num2;
num2=temp;
}
##修改后 (指针)
#include<stdio.h>
main()
{
void swap(int * num1,int * num2 )
//1、定义两个变量
int a=10;
int b=20;
//2、调用函数swap函数
printf("调用前:%d,%d\n",a,b);//10 20
swap(&a,&b);//此时传的是变量a和b的地址
printf("调用后:%d,%d\n",a,b);//20 10
}
void swap(int * num1,int * num2 )
{ //此时交换的是num1指向的变量和num2指向的变量的值
int temp= *num1;
*num1=*num2;
*num2=*temp;
}