c语言笔记之数组和指针(初学者)

数组

定义

由数据类型相同的一系列元素组成

size_t arr[index]={ }

*当{}内列出元素的值,可以让编译器自己数出数组大小,此时index可省略不写。数组的长度可以用(sizeof arr)/(sizeof arr[0])间接得出

初始化

不完全初始化时,编译器会把剩余的未初始化的数组初始化为0.

C99中在大括号内对指定元素赋值可用{[index] = data}的形式表示

未初始化的数组不要随意使用,内部数据是随机值。

不能使用变量定义数组(新手极易犯此种错误)
ps:C99引入了“变长数组”,可以用变量定义数组,但是声明时不允许初始化。

用const声明数组

只读数组用const声明,只能检索不能修改,程序稳定性更高。

数组溢出

对于定义的type arr[index],实际的下标边界是从0~index-1

多维数组

size_t arr[index1] [index2]={ }

*二维数组的定义和赋值形式如上,不能缺省二维的长度说明

二维数组的遍历需要双重循环

用途:char类型的一维数组存放字符串:char a[ ]={‘t’,‘e’,‘x’,‘t’,’\0’}等价于char a[ ]=“text”;,二维数组能够存放多个字符串,且采用初值表进行初始化时‘\0’必须给出。此时arr[i] [j]表示引用某个字符,而arr[i]表示引用某个字符串

字符串数组

char s[]={‘h’,‘o’,‘y’,’\0’}或者char s[]={“hoy”} 输出时printf()内用%s的格式
(内部的原理是从首地址逐个取出,直到遇到‘\0’为止

如果输出遇不到\0:按照定义变量时的存储规则(定义的先后存储时地址从大到小也是从下到上),会打印出相邻地址的字符。注意:‘\0’对应的ASCII值是‘0’,若数组后位为0也不会错误。

数组传参

将数组传入目标函数,传入的是首个元素的地址,无法在内部用sizeof(arr)/sizeof(0)得到数组长度,所以必须要在外部算出数组长度再把长度一起传入。/将数组传入函数时,要单独传入数组的大小/

一定记住!传入的是地址 地址 !不是整个数组的值!必须同时传入长度 长度 长度!
长度要在主函数内算出来k

深入理解数组

在C中数组名表示第0个元素的地址,即对于定义的a[index]数组,a等价于&a[0],实质是一个地址常量,其值不能更改,做比较也无意义。

  • 存储:连续存放
  • 数组名:首元素的地址。 *arr——读取首元素的值

例外!:sizeof()内部单独放一个数组名,计算的是整个数组占的字节大小。&数组名,取出的是整个数组的地址,虽然和首元素地址相同但是跨度是整个数组!


指针

定义

存放变量的地址。一定要指向一个变量

int *p = &x;

同一个变量可以有多个指针指向它,但一个指针不能同时指向多个变量,指针的指向可以修改

空指针:给指针赋一个NULL值 int *p = NULL; p的地址为0x0

检查空指针:

  1. if(p) //如果非空(可访问)则执行
  2. if(!p) //如果为空(不可访问)则执行

*多级指针:int *pp 存放*p的地址

*解引用操作符:通过地址找到对象。对pp的解引用找到的是p, 而*p就访问到x

指针的运算

  1. 指针的递增递减:p++ (p–)用指针代替数组,因其自增自减的性质,从而便于顺序访问内存中的每一个元素。注意区分*p++——(++的对象是指针)§++——(p所指对象++)

    数组名称不能做加减运算操作,只有指针才可以;指针的加减按照单元(根据类型分配字节数)。

  2. 指针的比较:地址的比较,可以用作遍历数组的循环条件等。

应用场景

1、函数需要返回多个值,即需要保存多个变量的改变量

2、函数返回运算状态,结果由指针返回

传入数组就是传入指针,指针可以当作数组使用,只要传入大小. *数组是const的指针,即int b [ ] ;等价于int * const b ;

const int p=&i; 表示不能通过p去修改i,但变量仍可被赋值,p也可以指向其他的变量。

在函数中改变数组的元素,main中的数组元素的值也改变。

3、用指针来存放字符串,字符串存储在常量区,无法对**p[0]**进行修改,

数组保存的字符串以变量形式存储在栈中

需要使用时即调用,效率高,开辟的存储空间少。

常用重定义:typedef char * string;

指针数组

实质是数组,存放指针。

int* arr[3] = {&a,&b,&c};


深入理解指针的存储

指针本身需要计算机用内存存储。

无论什么类型的指针,占据的内存区大小是相同的

这就是为什么sizeof一个数组时(数组跟指针有互通之处)得出的值恒为8或4了。


函数指针

void ( funcP) ();* 定义

funcP = function; 指向函数,不要写成function()

(*funcP)(); 等价于 funcP(); 等价于 function(); 使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA之运算符优先级

Java运算符优先级从高到低 运算符结合性[ ] . ( ) (方法调用)从左向右! ~ -- (一元运算) -(一元运算)从右向左* / %从左向右 -从左向右<< >> >>>从左向右< < > > instanceof从左向右 !从左向右&从左向右^从左向右|从左向右&&从左…

5 html 根据手机转动而转动_手机安装陀螺仪有什么用 手机安装陀螺仪作用介绍【详解】...

手机中有各种传感器&#xff0c;其中陀螺仪是个听起来高大上的玩意&#xff0c;今天小编就来给大家科普一下&#xff0c;陀螺仪在手机中的具体应用及其原理。 陀螺仪(角速度传感器)它的测量物理量是偏转、倾斜时的转动角速度。在手机上&#xff0c;仅用加速度传感器没办法测量或…

python学习turtle(笔控制)

学习记录&#xff0c; 笔控制 turtle.pendown() turtle.pd() turtle.down()&#xff0c;下笔&#xff0c;移动时绘画。 turtle.penup() turtle.pu() turtle.up()&#xff0c;拿起笔&#xff0c;移动时不绘画。 turtle.pensize(widthNone) turtle.width(widthNone)&#xff0c…

c语言语法格式规范(1)常量的非法与合法

c语言语法格式规范&#xff08;1)常量的非法与合法 首先确定常量的类型 整型 确定进制&#xff0c;查看各位数的范围是否超界。 8进制常量以前导 0 开始&#xff0c;每位数只能到7 例如&#xff1a;05188 非法 16进制常量以 0x 开始&#xff0c;每位从 0 ~ f 例如&#xf…

实例57:python

#画直线 import turtle def drawline(n): tturtle.Pen() t.color(0.3,0.8,0.6) #设置颜色&#xff0c;在0–1之间 t.begin_fill() #开始填充颜色 for i in range(n): #任意边形 t.forward(50) t.left(360/n) t.end_fill() #结束填充颜色 drawline(4)

BZOJ1895Pku3580 supermemo——非旋转treap

题目描述 给出一个初始序列fA1;A2;:::Ang&#xff0c;要求你编写程序支持如下操作&#xff1a; 1. ADDxyD&#xff1a;给子序列fAx:::Ayg的每个元素都加上D。例如对f1,2, 3,4,5g执行"ADD 241" 会得到f1,3,4,5,5g。 2. REVERSExy&#xff1a;将子序列fAx:::Ayg翻转。例…

光谱 波长_【第三课】红外光谱仪及其联用技术

第三课前两节课&#xff1a;【第一课】什么是红外光谱方法、【第二课】如何进行红外光谱结构解析&#xff0c;孙素琴教带我们学习了红外光谱的前世今生&#xff0c;以及红外光谱的理论基础。相信小伙伴们都有所收获&#xff0c;今天咱们将跟随另一位清华大学红外光谱专家周群老…

请写一个C表达式,对正浮点数a的值按四舍五入取整

(int)(n0.5) 当我们做强制类型转换时会直接舍弃小数部分&#xff0c;所以我们要做的就是改变浮点数的小数位大于或等于0.5时的个位值。 其他类型数据转换时也可用此思路。

实例58:python

#画方块 #!/usr/bin/python -- coding: UTF-8 -- from turtle import * forward(100) left(90) forward(100) for i in range(2): left(90) forward(100)

WPF 蒙罩层 LoadingPage

WPF 蒙罩层 LoadingPage 原文:WPF 蒙罩层 LoadingPageWPF 蒙罩层 LoadingPage 前言 无论是在PC客户端&#xff0c;移动端&#xff0c;网站&#xff0c;在遇到长时间处理的时候都会需要用到蒙罩层&#xff0c;让用户有更好的体现。今天上网逛了一下各位前辈网友的蒙罩层的实现方…

前端对所有文件请求添加header_【前端面试必问】浏览器缓存原理?送你满分答案...

(本文适合所1-3年的前端阅读)原文链接&#xff1a;http://blog.poetries.top/2019/01/02/browser-cache/一、浏览器缓存基本认识分为强缓存和协商缓存浏览器在加载资源时&#xff0c;先根据这个资源的一些http header判断它是否命中强缓存&#xff0c;强缓存如果命中&#xff0…

实例59:python

#题目&#xff1a;计算字符串长度 #!/usr/bin/python -- coding: UTF-8 -- sStr1 ‘strlen’ print (len(sStr1))

C语言实战:(1) 整数的二进制表示

#include<stdio.h> int main( ) {int a; //待转换的整数scanf("%d",&a);//用左移位运算(移到符号位时a的正负)逐位判断0和1for(int i0,n 0;i<sizeof(int)*8;i,n,aa<<1){if(n%40&&n!0)putchar( );//控制格式的输出&#xff1a;每四位输出…

intern()方法的使用

intern() intern方法的作用是&#xff1a;如果字符串常量池中已经包含一个字符串等于此String对象的字符串&#xff0c;则返回常量池中的这个String对应的对象&#xff0c; 否则将其添加到常量池并返回常量池中的引用。 在jdk1.7以后&#xff0c;就不会像之前那样把String对象复…

华为做raid5步骤_华为验厂验厂流程如何?主要内容是什么呢?

华为作为民族企业是全球领先的信息与通信技术(ICT)解决方案供应商&#xff0c;消除数字鸿沟&#xff0c;促进经济、环境和社会的和谐与可持续发展是华为一直以来的可持续发展愿景。为此&#xff0c;华为不仅支持联合国可持续发展目标的实现&#xff0c;还同时与供应链上下游的客…

实例60:python

#题目&#xff1a;打印出杨辉三角形&#xff08;要求打印出10行如下图&#xff09;。 #!/usr/bin/python3 def Pascal(n): ls [[1]] for i in range (1, n): ls.append([1]) for j in range(1, i): ls[i].append(ls[i-1][j-1] ls[i-1][j]) ls[i].append(1) for i in range(0…

FUI- 我离钢铁侠还差几步?

本文来自网易云社区作者&#xff1a;马宝什么是FUI本文不累赘的可以自行Google&#xff0c;喜欢科幻的同学们都看一张图就能感受到FUI的魅力。本文算是一篇所见即所的&#xff0c;可边学边干的原创教程。总结全文就一句话&#xff0c;“让结构和表现分离&#xff0c;自下而上的…

C语言实战:(2)字符串的倒转变换

#include<stdio.h> #define N 50 void reverse(char s[]); //定义倒转函数 int main( ) {char s[N];scanf("%s",s);reverse(s); printf("%s",s);return 0; } void reverse(char s[]) {char c,*p,*q;pqs;while(*p!\0)p;p--; //保留\0不被交换//基本思…

亿嘉和机器人上市了吗_亿嘉和上半年收入持续增长,拟7亿元定增加码主业研发...

《电鳗财经》 赵超/文作为国内机器人行业中重要成员之一的亿嘉和(603666.SH)&#xff0c;在深耕省内市场、持续拓展省外市场的策略下&#xff0c;上半年收入延续一季度增长态势。《电鳗财经》注意到&#xff0c;在公布半年报的同时&#xff0c;亿嘉和也抛出了7.08亿元的定增方案…

实例61:python

#题目&#xff1a;查找字符串 #!/usr/bin/python -- coding: UTF-8 -- sStr1 ‘abcdefg’ sStr2 ‘cde’ print (sStr1.find(sStr2))