您的位置:首页 > 理论基础 > 数据结构算法

数据结构总结,指针

2016-01-22 02:01 274 查看
#include<stdio.h>

int
main(void)

{
int
* p;
int
i = 5;

*p=i;
printf(*p);

return
0;
}

在变量声明时
在内存中已经开辟了一段内存空间,*p 里就已经有了一个不知道的值;

*p 以p为地址的一段变量

&i;表示取变量i的地址
*p表示 p地址的变量

#include
<stdio.h>

int
main(int
argc,
const
char * argv[]) {
int
i =5;
int
* p;
int
* q;

p=&i;

p=q;  
printf(*q);

   
return
0;
}
q本身是垃圾值,若把q付给p;那么p也会变成垃圾值

*q所代表的内存单元的控制权并没有分配给本程序。
可能会导致内存泄漏出现野指针。

p q r 指向同一个内存空间,free(p),再使用free(q),可能会导致程序崩溃。

形式参数的改变不能改变实际参数。

1.实参必须改为普通变量的地址
2.形参必须为指针变量。
3.在被调函数中通过
     *p 来
修改主调函数相关变量的值
#include
<stdio.h>

int
main(int
argc,
const
char * argv[]) {
int
a=3;
int
b=5;

huhuan(&a,&b);
return
0;

}

void
huhuan(int
* p,int
* q)

{
int
* t;

t=*p;

*p=*q;

*q=t;

}
*号的含义,

1.乘法
2.定义指针变量
3.取地址的逆运算符号(指针运算符)
&表示变量的地址(*p表示 以p的内容为地址的变量)

单个字符要用单引号扩起来char

指针可以使函数返回一个以上的值;

2.指针和数组:
     指针和一维数组
          一维数组名是个指针变量
          他存放的是一位数组的第一个元素的地址

如果一个函数需要处理一个数组, 需要第一个元素的地址和数组的长度

指针变量不能相加,不能相乘,不能相除,
如果两个指针变量指向的是同一块连续空间中不同存储单元,则这两个指针变量才可以相减。

一个指针变量到底占几个字节:一个指针变量占4个字节
     若指向char1个
     若指向int2个
     若指向double4个
          sizeof(int)
     指针因为本身已经声明了类型,所以知道自己到底是几个长度的地址

数组:长度不能是变量。而且必须是常整数
     传统定义的数组,程序员无法手动释放,数组一旦定义,系统就会为该数组分配存储空间就会一直存在,除非数组所在的函数运行结束。
     数组的长度一旦定义,就不能改变。
     A函数定义的数组,在A运行期间可以操作该数组,一旦A运行完毕,就不行了。

动态内存:

Malloc是memory() allocate(分配)的缩写

分配内存
1.要使用Malloc,必须添加malloc.h 头文件
2.malloc函数只有一个形参,并且形参事整形。
3.形参表示请求系统为本程序分配多少个字节
4.malloc函数只能返回第一个自己的地址。

#include
<stdio.h>

#include
<malloc.h>

int
main(void) {
int
i=5;
int
* p=(int
*)malloc(4);
*p = 5;

free(p);
return
0;
}

分配了8个字节,p变量占4个字节,p所指向的内存也站4个字节。
6.p本上所占的内存是静态的,p所指向的内存是动态的

#include <stdio.h>
#include <malloc.h>

int main(void){

    int a[5];
    int len;
    int * pArr;
    int i;

    scanf("%d",&len);
    pArr = (int *)malloc(4*len);
    for(i=0;i<len;i++){
        scanf("%d",&pArr[i]);
    }
    printf("输出\n");
    for(i=0;i<len;i++){
        printf("%d\n",pArr[i]);
    }
    return 0;
}

多级指针:
#include
<stdio.h>

int
main(void) {
int
i=5;
int
* p=&i;
int
** q=&p;
int
*** g=&q;
//q是个指针变量,无论q是什么类型的指针,都只占4个字节

printf("%d\n",***g);
return
0;
}

#include
<stdio.h>

#include
<malloc.h>

void
f(int
** q)

{

   

    *q = (int
*)malloc(sizeof(int))

    **q =
6;

}

int
main(void)

{

   
int * p;

    f(&p);

    printf("%d\n",*p);
}

指针优点:
     表示一些复杂的数据结构
     快速地传输数据,减少了内存的使用
     是函数返回一个以上的值
     能直接访问硬件
     能够方便地处理字符串
     是理解面向对象语言中引用的基础
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 指针