C语言回顾-指针
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语言回顾-指针的更多相关文章
- <2014 04 15> C++语言回顾精要(原创By Andrew)
C++语言回顾精要 <Visual C++程序设计>张岳新,这本书是很多学校的本科生C++教学用书,今天重新拿来翻了一遍.跟很多国人写的技术书籍一样,写书并不是为了让初学者看懂入门,而是为 ...
- 浅谈c语言的指针
对于非计算机专业的同学,c语言的指针往往就是老师的一句“指针不考“就带过了.c语言的指针号称是c语言的灵魂,是c语言中最精妙的部分. 指针本质上也是变量,也就是一段内存,只是他的特殊之处是他存储的数据 ...
- C#委托与C语言函数指针及函数指针数组
C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...
- C语言二重指针与malloc
(内容主要源于网上,只是加入了些自己的剖析) 假设有一个二重指针: char **p; 同时有一个指针数组 char *name[4]; 如何引用p呢? 首先我们有程序代码如下 #include &l ...
- C语言函数指针基础
本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础.如果你不讨厌事无巨细,请尽情阅读吧. 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具.本文将从C ...
- 为什么C/C++语言使用指针
这是参加面试时,面试官问的一道开放性题目. 问题是:为什么C/C++语言使用指针? 这个问题一问出来,直接被面试官秒杀了,面试官大神,你怎么不按套路出牌啊? 说好的malloc和new的区别呢?说好的 ...
- C语言的指针变量
C语言的指针变量 在C语言中,变量是固定范围的存储空间,它存储的是赋给他的值, 比如: ; /* 这里是定义一个整型变量a,并把12这个值存储在a的地址空间上 这个地址空间是系统随机分配的,对用户是透 ...
- Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型
Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...
- “对外部(局部)变量的访问”是C语言函数指针的最大弱点
1.“对外部(局部)变量的访问”是C语言函数指针的最大弱点 . #include <stdio.h> #include <stdlib.h> /* 结构体定义 */ struc ...
随机推荐
- trie字典树详解及应用
原文链接 http://www.cnblogs.com/freewater/archive/2012/09/11/2680480.html Trie树详解及其应用 一.知识简介 ...
- initWithCoder: 与initWithFrame:的区别
从nib中加载对象实例时,init:或initWithFrame:都不会调用.而是调用initWithCoder:怎么理解: 有时候,知道initWithFrame方法如何用,但是么有弄明白ini ...
- python使用mysql数据库
一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...
- Bean不同配置方式的比较
在<Spring3.x 企业应用开发实战>上学习了Bean的三种不同配置方法,下图是我从书中截取的图片,比较了一下这三种配置的异同 ps:发现图片不能完全显示(右侧有一块不显示),解决方法 ...
- 在Unity中使用TDD - 初探
描述 Editor Tests Runner是Unity中用来实现TDD的,其内部实现是基于NUnit. 其他 测试脚本要放在Editor文件夹中,测试要能够在一帧的时间内完成. 使用 打开Edito ...
- vb6保存项目到c盘的安装目录
工程保存在安装目录("C:\Program Files (x86)\Microsoft Visual Studio\VB98\errhandler1.vbp")里. 文件管理器找不 ...
- logoff remote desktop sessions via command line tools
This trick I learned from my one of ex-college. In Windows servers, only two remote desktop session ...
- nginx中相关配置
#nginx 开启目录浏览 location / { root /data/www/file //指定实际目录绝对路径: autoindex on; //开启目录浏览功能: autoindex_exa ...
- GDB调试32位汇编堆栈分析
GDB调试32位汇编堆栈分析 测试源代码 #include <stdio.h> int g(int x){ return x+5; } int f(int x){ return g(x)+ ...
- 最全的jQuery知识汇总
本帖最后由 断天涯大虾 于 2016-12-26 10:22 编辑<ignore_js_op> jQuery是什么? jQuery是javascript编写一个可重用的JavaScript ...