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 ...
随机推荐
- python学习 第一天
正式学习python第一天,网上找到了python教程,带练习题的,又装了ubuntu. 这是学习笔记: list[]: 可变,append/1,insert/2,pop/index? tuple() ...
- iOS开发之CocoaLumberjack
Cocoa LumberJack是一个功能强大的NSlog,是通用的Cocoa日志框架之一.它可以提供更高级的log功能,比如记录log至文件或网络,并可根据log的级别(info.debug.war ...
- 神经网络之Hebb学习规则
- Unity学习疑问记录之Awake和Update
Awake() 当一个脚本实例被载入时Awake被调用. Awake用于在游戏开始之前初始化变量或游戏状态.在脚本整个生命周期内它仅被调用一次.Awake在所有对象被初始化之后调用,所以你可以安全的与 ...
- C#组合查询小Demo
namespace WindowsFormsApplication1 { public partial class Form1 : Form { string Sql = "select * ...
- Ionic + AngularJS
Ionic Framework Ionic framework is the youngest in our top 5 stack, as the alpha was released in lat ...
- ThinkPHP数据库访问CRUD;__SELF__和__ACTION__的区别;自动收集表单:$n->create();
一.tp框架数据访问(pdo基础) public function test() { $n = D("Nation"); //select();find(); //查询 1.$at ...
- IOS的MVC和MVVM模式简明介绍
iOS中的MVC(Model-View-Controller)将软件系统分为Model.View.Controller三部分,结构图如下: Model: 你的应用本质上是什么(但不是它的展示方式) C ...
- jQuery 取选中的radio的值方法
var val=$('input:radio[name="sex"]:checked').val(); 附三种方法都可以: $('input:radio:checked').val ...
- 升级到macOS 10.12 mysqlb报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
系统升级到macOS 10.12后启动mysql后,在终端输入mysql 报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' ...