1.指针:地址

指针变量:存放指针的变量

指针变量的定义:数据类型 *指针变量名 或者 数据类型* 指针变量名

指针变量的初始化:int *p=&a;int *p=NULL;(不能先定义后初始化)

用*p获取指针变量指向的内存空间

如果指针变量定义以后不进行初始化,这个指针变量存放的是一个垃圾数,这个指针变量,称为野指针

用函数实现变量值的交换,传递指针

//
// main.c
// 变量值交换
//
// Created by fanyafang on 15/11/4.
// Copyright 2015年 itcast. All rights reserved.
// #include <stdio.h>
void change(int *a,int *b){
//用两个指针变量接收地址
//交换地址中所存的内容
//这样函数执行完以后,指针所指向的内容已经发生了改变
int temp=;
temp=*b;
*b=*a;
*a=temp;
} int main(int argc, const char * argv[]) {
int a=,b=; change(&a,&b); printf("a=%d,b=&b",a,b); return ;
}

2.指针的应用场景

1)在被调函数中可以修改主调函数的值

2)让函数可以有多个返回值(把地址传过去,可以修改地址指向的值)

3.二级指针

int **p1=&p;//p是一个一级指针

4.数组指针

指向数组的首地址

int a[4]={1,2,3,4};

int *p=a;

p+1指向数组的下一个元素

p-1指向数组的上一个元素

*(p+1)取得p+1对应的存储单元的内容

*(a+1)同上

*p++相当于*(p++)

*a++这样写是错误的,因为a是一个常量

5.一维指针数组

int a=0,b=0,c=0;

int *pa[3]={&a,&b,&c};//数组的值是地址

6.指针变量之间的运算-相减 判断两个指针变量之间相隔几个元素

7.用数组名访问二维数组

二维数组可以看做是特殊的一维数组

a;a+1;a+2是行指针

a[i]+j是列指针

第一行的首地址a[1]或a+1;

第二行第一个元素的地址:*(a+1)或者&a[1][0]

a=&a[0]=&a[0][0]=a[0]

8.二维数组指针-指向二维数组的指针

int a[2][3];

int (*p)[3]=a;//定义行数组指针

p=a;

p+1指向第一行

二维数组指针可以替代数组名使用

9.指针数组和二维数组指针的区别

指针数组int *p[3];//数组里放的是地址,是多个指针

二维数组指针 int (*p)[3];//指向二维数组的指针,是一个指针

C语言回顾-指针的更多相关文章

  1. <2014 04 15> C++语言回顾精要(原创By Andrew)

    C++语言回顾精要 <Visual C++程序设计>张岳新,这本书是很多学校的本科生C++教学用书,今天重新拿来翻了一遍.跟很多国人写的技术书籍一样,写书并不是为了让初学者看懂入门,而是为 ...

  2. 浅谈c语言的指针

    对于非计算机专业的同学,c语言的指针往往就是老师的一句“指针不考“就带过了.c语言的指针号称是c语言的灵魂,是c语言中最精妙的部分. 指针本质上也是变量,也就是一段内存,只是他的特殊之处是他存储的数据 ...

  3. C#委托与C语言函数指针及函数指针数组

    C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...

  4. C语言二重指针与malloc

    (内容主要源于网上,只是加入了些自己的剖析) 假设有一个二重指针: char **p; 同时有一个指针数组 char *name[4]; 如何引用p呢? 首先我们有程序代码如下 #include &l ...

  5. C语言函数指针基础

    本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础.如果你不讨厌事无巨细,请尽情阅读吧. 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具.本文将从C ...

  6. 为什么C/C++语言使用指针

    这是参加面试时,面试官问的一道开放性题目. 问题是:为什么C/C++语言使用指针? 这个问题一问出来,直接被面试官秒杀了,面试官大神,你怎么不按套路出牌啊? 说好的malloc和new的区别呢?说好的 ...

  7. C语言的指针变量

    C语言的指针变量 在C语言中,变量是固定范围的存储空间,它存储的是赋给他的值, 比如: ; /* 这里是定义一个整型变量a,并把12这个值存储在a的地址空间上 这个地址空间是系统随机分配的,对用户是透 ...

  8. Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型

    Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...

  9. “对外部(局部)变量的访问”是C语言函数指针的最大弱点

    1.“对外部(局部)变量的访问”是C语言函数指针的最大弱点 . #include <stdio.h> #include <stdlib.h> /* 结构体定义 */ struc ...

随机推荐

  1. *HDU1829 并查集

    A Bug's Life Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  2. SQL Injection(SQL注入漏洞)

    审计前准备: 1.安�php程序(推荐phpStudy) 2.高亮编辑器(推荐 Sublimetext Notepad++) 3.新建一个文本,复制以下变量,这些变量是审计中需要在源码中寻找的 ### ...

  3. SQL SERVER 数据库操作脚本

    创建数据库 create Database MYDB on ( Name=mydb_dat, FileName='c:\data\mydate.mdf',size=10,maxsize=50 ) LO ...

  4. spring接收json格式的多个对象参数(变通法)

    两种方法 方法1 如果使用spring mvc同客户端通信,完全使用json数据格式,需要如下定义一个RequestMapping @Controller public class TestContr ...

  5. spring bean的重新加载

    架构体系 在谈spring bean的重新加载前,首先我们来看看spring ioc容器. spring ioc容器主要功能是完成对bean的创建.依赖注入和管理等功能,而这些功能的实现是有下面几个组 ...

  6. Android高级之十二讲之如何降低应用内存消耗

    安卓应用的内存往往是有限的,从开始的8M到16M,24M,32M,48M,64M等逐步变大,但内存的变大是由于分辨率的提高导致,并不意味着可以随意声明使用内存,而不及时回收(即使Java有自己的垃圾回 ...

  7. Oracle知识分类之异常

    Oracle异常分类                                                                                           ...

  8. bash小技巧

    Linux 下shell基本上默认是 bash, 下面是我总结的一些技巧. &  后台运行程序 ,注意退出当前shell后 程序也会退出()   使用子shell, 比如 (cd ../../ ...

  9. HP ALM 使用经验

    使用HP ALM(Application Lifecycle Management)软件有一个多月的时间了,我是从安装,部署,建项,配置,使用,再到问题收集,这个过程过来的.发现ALM是一个功能确实强 ...

  10. node的错误处理

    当node程序出现错误的时候,首先是要捕捉到错误,然后处理错误,不能让进程挂掉,最后是将错误写进日志. 1.在app.js最开始写,用process对象,监听uncaughtException事件pr ...