今天来探讨一下关于指针的一些知识

1、指针

#include <stdio.h>#if   0
1、指针变量的定义数据类型*  变量名;注意事项:
1、在定义指定变量时,*起到标志性的作用,  除此情况以外,所有指针变量前面加*,表示指针指向的内存
2、*指针变量: 可以作左值也可以作右值
3、*指针变量:  本质就是解引用,访问从保存的地址开始,n个连续的内存
4、指针变量要与保存的地址类型匹配, 否则保存地址一点问题都没有,但是通过指针访问数据存在问题
5、不要出现野指针, 如果指针不知道指向哪里,可以指向NULL
6、所有指针变量的大小是一样的,  32位:  4字节    64位:8字节gdb调试常用指令:
(1)编译   :  gcc   xx.c   -o   xx   -g(2)执行:    gdb  ./xx(3)gdb内部指令:r   :  运行b  行号/函数名:  打断点n    : 单步调试p   变量名:   打印变量数据q    :   退出gdbl    :  查看代码#endifint main01()
{int a = 10;int*  p = &a;//int b = *p;*p = 200;printf("a: %d, *p= %d\n", a, *p);printf("&a: %p, p=%p\n", &a, p);printf("&p: %p\n", &p);return 0;
}   int main02()
{char a = '1';char* p;p = &a;printf("a: %c, *p= %c\n", a, *p);printf("&a:%p, p=%p\n", &a, p);printf("&p: %p\n", &p);return 0;
}int  main03()
{printf("sizeof(int*) = %ld\n", sizeof(int*));printf("sizeof(double*) = %ld\n", sizeof(double*));printf("sizeof(char*) = %ld\n", sizeof(char*));printf("sizeof(long*) = %ld\n", sizeof(long*));return 0;
}int main04()
{int a = 0x11223344;//char *p = &a;int *p = &a;printf("&a:%p, p:%p\n", &a, p);printf("a: %#x, *p=%#x\n", a, *p);return 0;
}int main()
{int a;int *p = NULL;*p = 89;return 0;
}

2、指针操作一维数组的三种方式

#include <stdio.h>//1、指针自增的方式访问数组每一个元素, 指针的指向发生改变
int main01()
{int a[5] = {1,2,3,4,5};int *p = a;  //   a, &a[0]都表示数组首元素的起始地址!while(p < a+5){printf("%d ", *p);p ++;}printf("\n");return 0;
}//2、通过指针加上一个整数的方式访问数组每一个元素, 指针的指向并没有发生改变
int main02()
{int a[5] = {1, 2, 3, 4, 5};int *p = &a[0];for(int i=0; i<5; i++)//每个元素的起始地址{printf("p+%d =  %p\n", i, p+i);}for(int i=0; i<5; i++){printf("*(p+%d) =  %d\n", i, *(p+i));   //表示每一个元素}return 0;
}//3、指针和下标的组合访问数组每一个元素
int  main03()
{int a[5] = {1,2,3,4,5};int *p = a;//  p[i]  等价于   *(p+i)for(int i=0; i<5; i++){printf("p[%d] = %d\n", i, p[i]);}return 0;
}int main()
{int a[5] = {1,2,3,4,5};int *p = &a[3];printf("p[0] = %d\n", p[0]);return 0;
}

3、二级指针

#include <stdio.h>#if  0
数据类型*  变量名;一级指针变量保存普通变量的地址
二级指针变量保存一级指针变量的地址#endifint main()
{int a = 10;int *p = &a;int**q = &p;printf("a:%d, *p=%d, **q=%d\n", a, *p, **q);printf("&a: %p, p=%p, *q=%p\n", &a, p, *q);printf("&p:%p, q=%p\n", &p, q);printf("&q:%p\n", &q);return 0;
}

4、数组指针

#include <stdio.h>#if   0
数组指针:  本质是一个指针变量,保存数组的起始地址数组指针语法:每个元素的类型(*p)[元素个数]int (*p)[8]  : 表示p是一个指针变量,保存有8个元素,每个元素是整型的数组的起始地址#endifint main()
{int   a[5] = {1,2,3,4,5};int (*p)[5] = NULL;p =  &a;// p:保存的是数组的起始起始地址// p+1 :  偏移一个数组的大小// *p : 表示数组首元素的起始地址// *p +1 :表示数组的起始地址printf("p = %p, p+1=%p\n", p, p+1);for(int i=0; i<5; i++){printf("*p+%d = %p\n", i, *p+i);  //表示每个元素的起始地址}for(int i=0; i<5; i++){printf("*(*p+%d)= %d\n", i, *(*p+i));  //表示每个元素的起始地址}return 0;
}

5、指针操作二维数组

#include <stdio.h>#if   0p:  是一个数组指针,保存二维数组第一行的起始地址p+i :  第i+1行的起始地址*(p+i) :每一行第一个元素的起始地址*(p+i)+j :每一行每一个元素的起始地址*(*(p+i)+j) :每一行的每一个元素#endif
int main01()
{int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,0,11,12}};int (*p)[4] = a;for(int i=0; i<3; i++)  //每一行的起始地址{printf("p+%d=%p\n", i, p+i);}for(int i=0; i<3; i++)  //每一行每一个元素的起始地址{for(int j=0; j<4; j++){printf("*(p+%d)+%d = %p ", i, j, *(p+i)+j);}printf("\n");}for(int i=0; i<3; i++)//每一行的每一个元素{for(int j=0; j<4; j++){printf("*(*(p+%d)+%d) = %d ", i, j, *(*(p+i)+j));}printf("\n");}return 0;
}int main()
{int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,0,11,12}};int (*p)[3][4] = &a;return 0;
}

6、指针数组

#include <stdio.h>#if  0
指针数组:  本质就是一个数组,每一个元素都是指针类型的!!!#endifint main()
{int x=1, y=2, z=3, w=4, u=5;int*  a[5] = {&x, &y, &z, &w, &u};for(int i=0; i<5; i++){printf("a[%d] = %p\n", i, a[i]);}for(int i=0; i<5; i++){printf("*(a[%d]) = %d\n", i, *(a[i]));}return 0;
}

什么是指针?什么是数组指针?什么是指针数组?相关推荐

  1. c++ char数组初始化_c专题指针数组与指针的关联

    ----在今天开始写文章之前,让我不由的想起高中里面学的一篇文章中一段话语,是荀子写的<劝学>:积土成山,风雨兴焉:积水成渊,蛟龙生焉:积善成德,而神明自得,圣心备焉.故不积跬步,无以至千 ...

  2. 语言axff所占字节数_【每日一答】(74)数组名v.s.指针变量,C语言其实很简单形象比喻为“是一个朋友圈的”...

    下图选自<C语言其实很简单>第8章: 问:请问张老师!书上第227页一句话:指针变量a本身的地址(a所在内存字节编号)是数组的地址,数值上与元素a[0]的地址相等! 这句话是什么意思,我看 ...

  3. 用指针、子函数的方法去一维数组中所有元素的平均值,并放在a[0]处

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p142 7.1.2 上级实训内容 [实训内容7]用指针.子函数的方法去一维数组中所有元素的平均值,并放 ...

  4. 如何给6个整数的一维数组某个元素赋值_数组指针详解

    文章部分资料来源: Pointer to an Array | Array Pointer - GeeksforGeeks​www.geeksforgeeks.org 介绍数组指针之前,先来回顾指针: ...

  5. 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )

    文章目录 一.二维数组内存大小计算 二.二维数组内存大小意义 一.二维数组内存大小计算 给定一个二维数组 : 该 二维数组 中有 444 个 一维数组 , 每个一维数组有 101010 个 char ...

  6. 【C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )

    文章目录 一.判定指针合法性 二.数组越界 三.不断修改指针变量值 四.函数中将栈内存数组返回 五.函数间接赋值形参操作 六.指针取值与自增操作 一.判定指针合法性 判定指针合法性时 , 必须进行如下 ...

  7. 【C 语言】数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )

    文章目录 前言 一.数组符号 [] 与 指针 * 符号 使用效果 基本等价 二.数组首地址 与 指针 本质区别 前言 参考 [C 语言]指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方 ...

  8. 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  9. 以指针的形式和以下标的形式访问指针?以指针的形式和以下标的形式访问数组?

    以指针的形式和以下标的形式访问指针?以指针的形式和以下标的形式访问数组? 例: A),char *p = "abcdef";  B),char a[] = "123456 ...

  10. 指针-数组传参,指针传参

    目录 数组传参 一维数组 二维数组 指针传参 一级指针 二级指针 一个特殊的二级指针 数组传参 一维数组 我们把传入一维数组时输入的是数组名,数组名是一个指向首元素的指针 那么在函数接收时,只需要保证 ...

最新文章

  1. SAP UI5 Globalization - date format讨论
  2. Python 操作 MySQL 的5种方式(转)
  3. xmemcached spring 配置文件
  4. Bailian4133 垃圾炸弹【枚举】
  5. CSS hack——不同浏览器的CSS应对法
  6. python时间处理方法_基于python时间处理方法(详解)
  7. 【广义S变换】一维广义S变换对非平稳信号处理的matlab仿真
  8. 2022年6月青少年软件编程(Python)等级考试试卷(一级)
  9. 全面改革个税关乎民生和正义
  10. 一个优质软件测试工程师简历,疯狂面试5家公司......
  11. 计算机编号怎么学,英文的一二三四编号电脑怎么打出来
  12. 第69天-内网安全-域横向 CobaltStrikeSPNRDP
  13. Java 冒泡排序法
  14. 软考高级软件架构师学习笔记一(软件架构设计)
  15. 格式工厂去广告版|格式工厂(Format Factory)免费版下载 v4.8.0
  16. 十进制转换成二进制 (栈)
  17. 公共DNS服务器——谷歌、阿里、百度
  18. java 日历计算农历和节假日的工具类
  19. 挑灯夜读——Java(一):类与对象
  20. unity 阻挡射线未生效_Unity社区在E3生效

热门文章

  1. 用ESP8266播放音乐(操作及问题处理)
  2. 安卓的进化,用户的阵痛?从奥利奥与奥利粤说起
  3. 创业粉去哪里引流?如何精准引流创业粉?创业粉的引流技巧
  4. 一个完全平方数是指一个数乘以自己,例:625=25^2; 特殊的完全平方数是指不仅是完全平方数而且平方后的数中有两个数字是相同的,例: 100=10^2; 144=12^2;
  5. 疫情此起彼伏,招聘直播或许是企业和求职者的最好选择
  6. min capacitance 违例
  7. iOS CoreAnimation专题——实战篇(四)基于拖动手势的视图3D旋转效果
  8. Python纯手动搭建BP神经网络--手写数字识别
  9. 【日拱一卒】如何编写测试用例(下)
  10. 网上千万不要在非官方直营店铺买的商品排行榜