存放变量地址的变量

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. Awesome Javascript(中文翻译版)

    [导读]:GitHub 上有一个 Awesome – XXX 系列的资源整理.awesome-javascript 是 sorrycc 发起维护的 JS 资源列表,内容包括:包管理器.加载器.测试框架 ...

  2. ha_innobase::general_fetch

    /***********************************************************************//** Reads the next or previ ...

  3. bzoj3571

    同样的最小乘积XXX模型,这里显然是二分图带权匹配 我不会写KM……于是写了个费用流,由于是稠密图,会退化到n^4 然后本地跑了56s,交上去过了………………一定是我电脑太慢…… 改天写个KM吧 *; ...

  4. UVa 11584 Partitioning by Palindromes【DP】

    题意:给出一个字符串,问最少能够划分成多少个回文串 dp[i]表示以第i个字母结束最少能够划分成的回文串的个数 dp[i]=min(dp[i],dp[j]+1)(如果从第j个字母到第i个字母是回文串) ...

  5. 如何解决:ERROR: the user data image is used by another emulator. aborting 的问题

    问题概述: 在启动Android模拟器时出现以下错误,导致启动失败. ERROR: the user data image is used by another emulator. aborting. ...

  6. (转)Linux上的Shebang符号(#!)

    https://linux.cn/article-3664-1.html 本文了将给你简单介绍一下Shebang(”#!”)这个符号. 首先,这个符号(#!)的名称,叫做”Shebang”或者”Sha ...

  7. 【DFS】NYOJ-82 迷宫寻宝(一)-条件迷宫问题

    [题目链接:NYOJ-82] #include<iostream> #include<cstring> using namespace std; struct node{ in ...

  8. 【转】iOS中定时器NSTimer的使用

    原文网址:http://www.cnblogs.com/zhulin/archive/2012/02/02/2335866.html 1.初始化 + (NSTimer *)timerWithTimeI ...

  9. Oracle RAC 客户端连接负载均衡(Load Balance)

    实现负载均衡(Load Balance)是Oracle RAC最重要的特性之一,主要是把负载平均分配到集群中的各个节点,以提高系统的整体吞吐能力.通常情况下有两种方式来实现负载均衡,一个是基于客户端连 ...

  10. [Everyday Mathematics]20150110

    试证: $$\bex \vlm{n}\frac{\ln^2n}{n}\sum_{k=2}^{n-2}\frac{1}{\ln k\cdot \ln(n-k)}=1. \eex$$