c---指针

作者: 歌白梨 | 来源:发表于2015-10-15 10:47 被阅读120次

有三种内存的分配方式:

1.静态存储区分配,编译期间就已经分配好,一直存在(函数外部变量,static);

2.(动态)栈创建,处理器自行处理,效率高但是内存有限(函数参数,局部变量);

3.(动态)堆分配,程序员分配,自行管理,存在内存碎片,容量大(malloc/free)。

为什么使用指针

结构紧凑

运行效率高

可表示一些复杂的数据结构类型

可以让函数返回多值

函数就是指针

动态分配内存,灵活

指针的基本知识

两个部分:地址+该指针的类型

两种类型:数据指针和函数指针

指针与地址的区别:一个变量,一个常量

占用内存大小

32位机器  - 4byte

64位机器 - 8byte

指针的使用

1.定义

int a = 1;

// int * p = 3;//错误,野指针,未指向任何内存

int * p = &a;//使用前先初始化,p指向a的地址

2.指针与字符串,数组

char arr[5] = {'a','b','c'};// 内存 a b c  .  .  /o

char * p = "abc" // 内存 a b c /o

p++;//正确,指向b

arr ++;//错误 arr : 元素首元素的地址 &arr :数组指针

3.指针与二位数组

char arr[][5] = {"aaa","bbb","ccc"};

arr : 数组行指针

&arr:数组首列首地址

注意:

区别 int * p[], int (*p)[];

区别 二维数组和指针数组(就是区别数组和指针)

4.指针与函数

int p();

int *p();//函数,返回指针

int (*p)();//指针,指向返回int值的函数

int *(*p)();//指针,指向返回int型指针的函数

5.指针与函数参数方面的问题

5.1修改指针对应的值

//1.交换两个数的值;正确

void swap(int * a,int * b){

int temp = *a;

*a = *b;

*b = temp;

}

调用

swap(&a,&b);

//2.交换两个数的值;错误//仅仅改变了参数的地址,与原数据无关

void swap(int * a,int * b){

int * temp = a;

a = b;

b = temp;

}

调用

swap(&a,&b);

//3.交换两个数的值;正确//使用二级指针改变了源数据的指针

void swap(int ** a,int ** b){

int * temp = a;

a = b;

b = temp;

}

调用

swap(&a,&b);

相关文章

  • c---指针

    有三种内存的分配方式: 1.静态存储区分配,编译期间就已经分配好,一直存在(函数外部变量,static); 2.(...

  • go context

    Req-->a-->c--->b---->return (链式调用) 链式调用和我们普通的函数调用是存在差别的:函...

  • 坚持学习分享第550天 焦点解决核心技术与四项限结合的案例分析

    一,焦点解决核心技术一建构 ✔ S ---量尺问句 ✔ C---应对问句 ✔ O---结果问句 ✔ R---关系问...

  • xy+状态_三维bfs

    2019牛客网寒训#C---走迷宫 题目描述 精通程序设计的 Applese 双写了一个游戏。在这个游戏中,它被困...

  • 混淆知识点

    1、指针数组&数组指针、常量指针&指针常量、函数指针&指针函数 数组指针&指针数组 数组指针的定义 int (*p...

  • C语言

    C 指针、指针变量、函数指针、指针函数、指针数组、数组指针、C 数组

  • 指针

    普通指针指针的指针 数组指针 函数指针

  • 函数指针

    概念: 指针函数, 函数指针, 指针数组, 数组指针, 指向数组的指针, 指向函数指针数组的指针。

  • C:函数指针的坑

    关于该死的函数指针和指针函数 先来个目录 常量指针、指针常量 数组指针、指针数组 函数指针、指针函数 1、先看第一...

  • C 语言指针

    指针类型:指针的读取长度,指针的读取方向(大小端) 空指针,无类型指针,野指针 常量指针,指向常量的指针 http...

网友评论

    本文标题:c---指针

    本文链接:https://www.haomeiwen.com/subject/nwoocttx.html