c语言指针

指针

  1. 什么是指针?
    指针=内存地址
  2. 什么是指针变量?
    储存着内存的变量
    (平时会把指针变量习惯性的叫做指针)
  3. 指针的作用是什么?
    利用*(解引用运算符)可以查询数据(*指针名)、存储数据(*指针名=数据值)

在这里插入图片描述

#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

}
  1. 指针的使用细节?
    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;  //赋值未分配空间的内存地址
    
  2. 指针的作用
    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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值