C语言面试必问知识点之「指针」

一、指针相关概念

  • 指针与地址

    • 我们使用的计算机,系统为了更好地管理我们的内存,就为内存区的每一个字节都分配一个唯一编号,这就是“地址”。

    • 指针的实质就是地址,就是这一个个编号。

  • 指针变量

    变量在编译的时候系统要为它分配一个地址,如用另一个变量来存放这个地址,那么这个变量就叫指向变量的指针变量。

  • 指针的定义(type *变量名;)

    • int *p;

    • 表示该变量的类型是一个指针变量,指针变量名是p而不是*p

    • 如果在同一行定义多个指针变量应该是:int *p1, *p2;而不是int *p1, p2

  • 指针的初始化

    type *变量名 = 地址;
  • 例子

    #include int main(){    int a = 100;    printf("%d\n",&a);    int *c = &a;    printf("%d\n",c);    return 0;}

二、指针变量的使用(如何通过指针变量访问和运算)

  • 指针变量访问

    定义一个指针变量,并且指向一个地址

    int a = 10;int *p = &a;*p = 100;printf("a:%d\n",a);
  • 指针运算

    定义一个指针变量,指向一个地址,并对指针做自增自操作

    #include int main(){    int a = 10;    int *p = &a;    printf("p:%d\n",p);    p++;    printf("p:%d\n",p);    return 0;}

三、数组指针

  • 数组指针

    数组指针,见名知意就知道是数组的指针,也就是数组的地址,在定义指针变量时,*变量名一定要带上(),不然就是定义指针数组

    int main(){    int array[5] = {1,2,3,4,5};    printf("%d\n",&array);    int (*p)[5] = &array;    printf("%d\n",p);    return 0;}

四、指针数组

  • 指针数组

    指针数组,就是存放指针的数组,数组里的元素都是指针,在定义指针数组时,不需要加上(),不然就是定义数组指针

    int main(){    int array[5] = {1,2,3,4,5};    int *p[5];    int i;    for(i=0;i<5;i++)    {       p[i] = &array[i];       printf("%d\n",p[i]);    }    for(i=0;i<5;i++)    {        printf("%d\n",*p[i]);    }    return 0;}

五、字符串与指针

  • 字符串的表示形式

    • 数组形式:

      char str[] = "I love xdclass"; //栈

    • 字符指针形式:

      char *str = "I love xdclass"; //文字常量区

  • 字符指针形式

    char *str = "I love xdclass";

    因为常量不可修改,所以指针变量指向的字符串内容不可修改,即*str = "xdclass";这样是错误的

  • 修改指针变量的值

    char *str2 = "I love the world";str = str2;
  • 例子

    int main(){    char string[] = "I love xdclass";    printf("%s\n",string);    char *str = "I love xdclass";    char *str2 = "I love the world";    str = str2;    printf("%s\n",str);    return 0;}

六、怎么使用指针函数

  • 指针函数

    函数返回类型是指针,所以就指针函数

  • 例子

    #include // 买菜:char* buy(){    char *foods = "鸡蛋";    printf("%s买好了\n",foods);    return foods;}// 洗菜void wash(char *foods){    printf("把%s洗干净了\n",foods);}// 炒菜void make(char *foods){    printf("把%s做好了\n",foods);}int main(){    char  *foods = buy();    wash(foods);    make(foods);    return 0;}

七、怎么使用函数指针

  • 函数指针的定义

    函数返回值类型 (* 指针变量名) (函数参数列表);

    int(*p)(int, int, double, float);
  • 例子

    int printfx(int x){    printf("%d\n",x);    return 0;}int main(){    printfx(2);    int (*p)(int);    p = printfx;    p(3);    return 0;}

八、 什么是指向指针的指针

  • 什么是指向指针的指针?

    如果一个指针变量存放的是另一个指针变量的地址,则称这个变量为指向指针的指针变量或指向指针的指针

  • 定义方式

    数据类型 **变量名

  • 例子

int main(){    int a = 100;    int *p = &a;    int **pp = &p;    printf("a:%d\n",a);    printf("p:%d\n",*p);    printf("pp:%d\n",**pp);    return 0;}

  

# Louis讲师 #

- 手把手带你走进指针的世界 -

速戳,观看「C语言教程」!

printf 指针地址_指针搞都不懂,好意思说自己会C语言?相关推荐

  1. Go基础:指针地址、指针类型、多重指针、指针运算

    目录 到底什么是指针呢? 指针 指针地址和指针类型 指针取值 指针变量初始化 指针运算符 多重指针 指针运算 到底什么是指针呢? 内存就是一系列有序列号的存储单元,变量就是编译器为内存地址分配的昵称, ...

  2. printf 指针地址_数组指针和指针数组

    首先,理解一下数组指针和指针数组这两个名词: 数组的指针:是一个指针,什么样的指针呢?指向数组的指针. 指针的数组:是一个数组,什么样的数组呢?装着指针的数组. 然后,需要明确一个优先级顺序:()&g ...

  3. C++指针地址和指针的值

    C++指针 学过C++ 都知道,指针是一个很重要的概念,他是C++的灵魂,在上学的时候从书山了解到,指针就是指向内存的地址,然,今天和同事讨论指针传递和引用传递的时候,我说:指针传递其实就是引用传递. ...

  4. xftp怎么有root权限_许多人都不懂的Linux系统里的特殊权限!!你真的了解嘛?...

    有的朋友一听Linux系统文件还有特殊权限,那头就要爆炸了,那还是接着看看/tmp目录和/usr/bin/passwd文件,怎么回事啊!!!看见没有啊! 不是应该只有rwx 吗?还有其他的特殊权限( ...

  5. c语言 怎么访问64位地址_大神用10000字总结了嵌入式C语言必学知识点……

    导读:怎么做好嵌入式?相信这个问题无论问谁你都会得到一句学好C语言!今天推荐一篇大佬写的嵌入式C语言知识点总结,非常值得一读. 从语法上来说C语言并不复杂, 但编写优质可靠的嵌入式C程序并非易事,不仅 ...

  6. 翁恺老师C语言学习笔记(十)指针_指针运算

    我们先看一段代码 #include <stdio.h>int main(void) {char ac[] = {0,1,2,3,4,5,6,7,8,9,};char *p = ac;pri ...

  7. C语言指针(函数指针数组,二级指针)

    int (*p[num])( char*,int,int );int (*(*p)[num])(int a); 上一篇博客最后的两个例子的答案分别是:函数指针数组,函数指针数组的指针. 函数指针数组指 ...

  8. printf 指针地址_c语言对指针的理解

    先来讲一下本人学指针的经历:大一的时候刚接触c语言对指针这东西真的是太迷了,感觉麻烦难懂不想其他语言一样.但是搞懂以后就被指针的魅力吸引甚至喜欢上c语言.不多讲,开始!(文章可能有些长,但放心全是基础 ...

  9. c 指针地址 突然改变_开发笔记 - Cpp - 指针 - 1.1 如何理解指针

    写在最前 作为在贵乎的第一篇文章吧... 允许我加点废话(求轻喷... 应该是从19年的下半年开始,虽然顶着算法工程师的title,但做的很多事情都是开发了,然后19年12月跳槽之后,到了新的环境并开 ...

最新文章

  1. 5.13T1Send 题(send)
  2. POJ 1806 Manhattan 2025
  3. 关于创业公司产品开发原则
  4. 【简单数论】H - A^X mod P_HRBUST - 2049_31行代码AC
  5. javafx 动画没效果_通过JavaFX标注制作动画效果
  6. Linux : shell基础(慕课网Linux达人养成计划课程笔记)
  7. 蔚来资本宣布完成约4亿美元二期基金募集
  8. Ibatis SqlMapclient对象
  9. 使用seaborn制图(箱型图)
  10. 轻轻松松的记住Linux系统目录结构
  11. Laravel 在哪些地方使用了 trait ?
  12. Android高手进阶:Adapter深入理解与优化
  13. 四级重点高频词汇表_零基础,教你裸过英语四级!这些方法请收藏
  14. linux大容量硬盘 克隆到小硬盘_试玩免费硬盘克隆软件 再生龙 分区备份及恢复篇...
  15. css3图片倾斜3d动画效果
  16. 初识F5之BIGIP-LTM负载均衡
  17. TJA1050国产替代DP1050T高速 CAN 总线收发器
  18. ssm+java+vue基于微信小程序的美容院管理系统#毕业设计
  19. 学编程很枯燥_技术文档不必很枯燥
  20. 试试54款开源服务器软件

热门文章

  1. Redis-3.2.4服务搭建
  2. ACMMM2021|在多模态训练中融入“知识+图谱”:方法及电商应用实践
  3. 对话猿辅导:阿里云远程办公零信任落地创新安全
  4. 科学地花钱:基于端智能的在线红包分配方案
  5. 第九弹 - 脚本模式与参数视图
  6. 技术三板斧:关于技术规划、管理、架构的思考
  7. 重磅发布:阿里开源 OpenJDK 长期支持版本 Alibaba Dragonwell
  8. 争分夺秒:阿里实时大数据技术全力助战双11
  9. 云厂商靠不靠谱?“国家级标准”鉴定结果来啦
  10. Web3.0 兴起之际,元宇宙这杯羹怎么分?