存放变量地址的变量

int a = 1;
int *p;
p = &a;
 
在64位系统中,占用8个字节

  • 直接引用
  • 间接引用
*p : 指针指向的变量的值
不要使用未初始化的指针
 
 
1.使用指针实现改变实参值
2.函数返回两个值, 使用指针参数可以改变值的方法
3.不同类型的指针的区别,区分指向的值的长度
 
A.指针与一维数组
1.利用指针读取数组元素
2.利用指针遍历数组元素
指针加减可以操作指针的指向地址
p++, p+1, p+2
根据指针类型,跳转规定长度的地址
 
ps:数组名即数组位地址,不允许使用++自加,因为它是常量,不允许赋值,但是可以进行加减供其他地方使用。
 
使用指针还是数组存储字符串
需要改变字符串:数组
不需要改变字符串:指针 char *p = “abc”
 
数组下标与指针加减
int a[5];
int *p = a;  或 int *p = &a[0];
a[2] ===> p+2;
 
3.指针数组
char *names[5] = {“jack”, “Lucy”, “Sam”, “Tom”, “Cc”};
 
 
 
 
B.指针与函数
1.指向函数的指针
函数名代表函数地址
定义一个指向函数的指针
sample1:
     //Define a pointer pointting to a function
int (*p) (int, int);
p = sum;
//Call sum by p indirectly
p(,);
sample2:
    void (*p)();

    p = test;

    p();//or (*p)();
 
可以把函数当做参数传送
 int test(int a, int b, (*p)(int int)
{
return p(a, b);
}
 
函数名代表函数的首地址,类似数组
 
 
 
2.返回指针的函数
 char *test()
{
return “hello”;
}
 
C.指针与指针
指针类型的作用
例如指针加减p+1 p+2 p-1,自增自减p++, p—,需要根据指针类型确定内存偏移位置
int **p;//指向整型指针的指针
 
空指针 void *
p = NULL;
 
 
D.指针与字符串
char name[] = “Simon”; <==字符串变量,数据在栈中
输出效果等价于
char *name = “Simon”; <== 字符串常量,数据在常量区
例如
char *name1 = “Simon”;
char *name2 = “Simon”;
name1 和 name2 指向的实际是同一个常量
    char *name1 = "Tom";
    char *name2 = "Tom";
    printf("name1 addr = %p, name2 addr = %p\n", name1, name2);
out:
name1 addr = 0x104d05f6d, name2 addr = 0x104d05f6d
 
指针也能像数组一样访问其中的字符,例如name1[2];
 
 
区别:
使用sizeof的时候,对数组能够得到数组所占用的字节数,而指针得到的是指针占用的字节
字符串数组可以修改字符串,字符串指针不能,只能改变指向 

[C语言 - 4] 指针的更多相关文章

  1. 浅谈c语言的指针

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

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

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

  3. C语言二重指针与malloc

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

  4. C语言函数指针基础

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

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

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

  6. C语言的指针变量

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

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

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

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

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

  9. go语言学习--指针的理解

    Go 的原生数据类型可以分为基本类型和高级类型,基本类型主要包含 string, bool, int 及 float 系列,高级类型包含 struct,array/slice,map,chan, fu ...

  10. C语言中指针占据内存空间问题

    以前一直有个疑问,指向不同类型的指针到底占用的内存空间是多大呢? 这个问题我多次问过老师,老师的答案是"指向不同类型的指针占据的内存空间大小不同",我一直很之一这个答案,今天我就做 ...

随机推荐

  1. python学习笔记之初识Python

    一直听说python语音的简单易用而又强大,今天终于忍不住借本书,开始接触接触一下它,下面结合书本和自己的一些体会,写一下刚刚接触python的东西,重点写一些和C++有区别的地方. (1)输入inp ...

  2. android中getSystemService详解

        android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如MountService监 听是否有SD卡安装及移除,ClipboardS ...

  3. 亲测!Jquery2.0不支持IE8-了

    最近由于测试需要,Win7回退到了官方更新的IE8浏览器,惊人的发现: <script src="//cdn.bootcss.com/jquery/2.0.0/jquery.min.j ...

  4. LA 4636 (贪心) Cubist Artwok

    题意: 一个由若干小正方体组成的图形,给出它的正视图和侧视图,求满足条件的最少小正方体的个数. 分析: 虽说是一道简单的贪心,可一直没有太好的思路. 又一次可耻地看了别人的题解. http://blo ...

  5. django - 修改 request.POST的值

    # querydict改为mutable data = data.copy() data.update({'key_list': DATA_UPLOAD_PARAMETER}) 默认的request. ...

  6. 使用D3D渲染YUV视频数据

    源代码下载 在PC机上,对于YUV格式的视频如YV12,YUY2等的显示方法,一般是采用DIRECTDRAW,使用显卡的OVERLAY表面显示.OVERLAY技术主要是为了解决在PC上播放VCD而在显 ...

  7. grep的-A-B-选项详解(转)

    grep的-A-B-选项详解(转)[@more@] grep能找出带有关键字的行,但是工作中有时需要找出该行前后的行,下面是解释 1. grep -A1 keyword filename 找出file ...

  8. java中时间格式yyyyMMddHHmmss的大小写问题

    字母     日期或时间元素 表示 示例 G Era 标志符 Text AD y 年 Year 1996 ; 96 M 年中的月份 Month July ; Jul ; 07 w 年中的周数 Numb ...

  9. 用defy来潜水最终还是挂了........

    defy526是6级,,不过好像这次我用来潜过去不足2米还是挂掉了... 国际通用的防水级别认证体系: IPX-0 没有防水保护 IPX-1 设备在正常操作状态下,可以提供相当于3-5毫米/分钟降雨的 ...

  10. Linux下GPIO驱动

    编写驱动程序,首先要了解是什么类型的设备.linux下的设备分为三类,分别为:字符设备,块设备和网络设备.字符设备类型是根据是否以字符流为数据的交换方式,大部分设备都是字符设备,如键盘,串口等,块设备 ...