C语言知识点中的指针如何分析
导读:本文共1599字符,通常情况下阅读需要5分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 指针是C的灵魂,没有学会指针就相当于没有学过C指针的定义:指针就是内存单元的编号(编号>=0)指针变量是存放内存单元编号的变量(存放地址的变量)指针 & 指针变量是不同的 e.g:普通变量a的地址是1000H,可以称a的指针是1000H 但是绝对不能说a的指针变量是1000H指针是一个操作受限的非负整数:比如2个地址相乘是没有意的 故不能做乘法操作... ...
目录
(为您整理了一些要点),点击可以直达。
指针是C的灵魂,没有学会指针就相当于没有学过C
指针的定义:指针就是内存单元的编号(编号>=0)
指针变量是存放内存单元编号的变量(存放地址的变量)
指针 & 指针变量是不同的
e.g:普通变量a的地址是1000H,可以称a的指针是1000H 但是绝对不能说a的指针变量是1000H
指针是一个操作受限的非负整数:比如2个地址相乘是没有意的 故不能做乘法操作,所以说指针是受限的
指针为什么重要?
(1).快速的传递数据,减少内存的使用
(2).可以使函数返回一个以上的值
(3).可以直接访问物理硬件
(4).可以方便的处理字符串
(5).是理解面向对象语言中"引用"功能的基础
(6).可以表示一些复杂的数据结构
指针的分类:
1.基本类型指针(重点):int *i//变量名:i int *表示i变量存放的是int类型变量的地址
e.g:
int*i;inta=10;i=a//error:i&a虽然都是变量但是i是指针变量a是普通变量类型不同不能赋值i=&a;//True&是取地址符号&a表示取变量a的地址;把a的地址赋值给指针变量iprintf("*i=%d\n",*i)//输出结果:*i=3i获取到a的地址后*i表示指向了a*i=a;
经典的例子加深对指针的理解:互换2个数字(之前使用的是普通变量,现在使用指针&函数)
#include<stdio.h>voidswap(intp,intq){intt;t=p;p=q;q=t;return;}//swap不能完成互换,只是互换了形参的值主函数中的实参值并未互换voidswap1(int*p,int*q){int*t;t=p;p=q;q=t;}//swap1不能完成ab的值互换,只是互换指针变量voidswap2(int*p,int*q){intt;t=*p;//*p=a,*q=b*p=*q;*q=t;}//swap2互换成功intmain(void){inta,b;a=5;b=9;swap(a,b);printf("a=%d,b=%d\n",a,b);swap1(&a,&b);printf("a=%d,b=%d\n",a,b);swap2(&a,&b);printf("a=%d,b=%d\n",a,b);return0;}/*输出结果:a=5,b=9a=5,b=9a=9,b=5总结:思考:printf为什么不能放在被调函数中?题目的要求是:互换ab的值而非被调函数的值互换测试结果:1.swap只是被调函数的形参值互换了主函数中的实盘并没有互换2.swap1只是互换ab地址的存储位置并没有互换ab地址中的值**3.swap2为什么会成功?原因很简单哦swap2的功能是把ab地址中的值互换了简单说:ab是被划分出来的2个静态地址5,9是存放在地址中的值swap2功能是把2个地址中的59互换一旦地址中的值达到互换即ab的值完成了互换***/
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
C语言知识点中的指针如何分析的详细内容,希望对您有所帮助,信息来源于网络。