个人对c语言指针的理解

花了2天看了培训的c语言的视频,总的对指针有一个了解。指针就是地址。
int i=5;
int *p;
p=&i;

P为变量,是I的地址。*p的含义为:以p内容为地址的变量。

要想在子函数中交换主函数a,b的地址,则可以通过指针来实现。

#include <stdio.h>
void swap(int * a,int * b)
{
    int t;
    t=*a;
    *a=*b;
    *b=t;
    return;
}
int main()
{
    int a,b;
    a=3;
    b=5;
   swap(&a,&b);
    printf("a=%d,b=%d\n",a,b);
    return 0;
}
直接通过传入a,b的值来修改是不行的,子函数的参数是存储在静态存储区的,子函数结束的时候,子函数分配的形参空间会被释放,无法return给主函数。

直接传入a,b的地址,把地址赋值给p,q,p指向a,q指向b;   但不能修改a和b。*p=a,*q完全等于b,修改*p,*q就能修改主函数a和b的值。

指针就是地址,地址就是指针,地址就是内存单元的编号;指针变量是存放地址的变量
叙述时会把指针变量简称指针
int * p; 语句:p是变量名,int * 代表的是存放int变量地址的类型
int j,i=5; p=&i;j=*p;  p保存i的地址,p指向i  ;*P完全等于I ;修改i的值不会改变p的值,修改p的值也不会修改I的值
*p就是以p内容为地址的变量    
地址为十六进制,0x  一个字节为8位,内存条存的是8位11111111
函数使用完毕,给函数分配的静态空间会释放。函数的参数也会分配空闲的空间
指针的用途:
1. 使函数返回多个值
1) 返回数组
2) void pop(int *a,int n)//直接修改原数组的值
2. 表示一些复杂的数据结构
3. 直接访问硬件
4. 快速的传递数据
5. 方便处理字符串
6. 理解面向对象语言的引用基础
指针的分类
1. 基本类型的指针
2. 指针和数组
a) 如果P是一个指针变量,则p[i]永远等价于*(p+i)
b) 一维数组:用指针需要两个参数 首地址和长度
3. 指针和函数
4. 指针和结构体
5. 多级指针
地址为非负整数。一个单元等于一个字节,0或者1。每个单元8位  
32根总线  2的32次方,2的30次方为1G。32根线的状态为0或1
 
int *p;int i=5;*p=i;错误:分配了地址变量p和int变量i的空间,但是*p是p地址指向的值,但是没有给p赋值,那p原来的值是垃圾值,有可能指向其他程序,把i赋值给*p,其他程序可能会奔溃,相当于修改其他程序的地址,病毒就是这个原理

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值