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. plist文件里的"Bundle versions string, short" 跟 "Bundle version" 的区别及作用

    Bundle versions string, short:用于itunes上显示的版本号,即对外的版本,一般除了版本迭代外,不能随意更改. Bundle version:内部项目管理的版本号,是给程 ...

  2. PHP连接数据库的方法

    mysql可通过两种方式通过PHP和web相连,一种通过php的mysql相关函数,另一种通过php的ODBC相关函数. 相关函数如下: MYSQL函数 mysql_affected_rows: 得到 ...

  3. Unity学习疑问记录之界面适配

    Unity3d UGUI 界面适配 实例解析 三种适配方式 http://www.mamicode.com/info-detail-475563.html

  4. CSS3的高级特性

    CSS3对响应式设计非常有用:使用CSS3替代图片,在有带宽限制的网页中可有效减少http请求(从而使网页加载更快),并可使网页更灵活.更容易维护. 在开发CSS3时,要记住添加相关的浏览器私有前缀以 ...

  5. 安卓初級教程(2):SD創建file,儲存與讀寫的方法(1)

    package com.sdmadik; import java.io.*; import android.app.Activity; import android.os.Bundle; import ...

  6. equals和==的区别

    ---恢复内容开始--- equals:用于判断两个变量是否是对同一个对象的引用,即堆中的内容是否相同. 1.第一:对象不同,内容相同: ==:等于.比较两个地址是不是一样的(地址一样值肯定一样)(比 ...

  7. office 365 online api

    https://view.officeapps.live.com/op/view.aspx?src=http://bookfuns.com/1.ppt

  8. imx6 关闭调试串口

    需要关闭imx6调试串口,用作普通的串口使用. 参考链接 http://blog.csdn.net/neiloid/article/details/7585876 http://www.cnblogs ...

  9. 来杯Caffe——在ubuntu下安装Caffe框架并测试

    Caffe是一种深度学习框架...blablabla...... Caffe要在ubuntu下安装 1. 安装依赖 sudo apt-get install libatlas-base-dev sud ...

  10. 设置glassfish开启自动domain

    1-在/etc/rc.local中配置开机自启动 su - sumapay25 -c "/opt/glassfish.sh start 1" 2-/opt/glassfish.sh ...