个人对c语言指针的理解

来源:互联网 发布:寒夜 知乎 编辑:程序博客网 时间:2024/05/17 18:03
花了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,其他程序可能会奔溃,相当于修改其他程序的地址,病毒就是这个原理

















1 0