数据结构总结,指针

#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);
}

指针优点:
     表示一些复杂的数据结构
     快速地传输数据,减少了内存的使用
     是函数返回一个以上的值
     能直接访问硬件
     能够方便地处理字符串
     是理解面向对象语言中引用的基础


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值