3. 指针、数组

news2025/1/2 22:57:38

目录

一、指针和数组

🍐 数组名指向首地址

🍊 例子

二、数组作为函数参数 

🍋 数组名作为函数参数,为什么必须传递数组大小?

三、指针和字符数组

🍌怎么样存储一个string?

🍉数组和指针是以相似方式使用的不同类型

🍇 例子

四、指针与二维数组

🍓  数组在计算机中的组织形式

五、指针与多维数组

🍈 例子


一、指针和数组

🍐 数组名指向首地址

int *p=&A[0]
int *p=A;

🍊 例子

#include<stdio.h>
int main()
{
	int A[] ={2,4,5,8,1};
	int i;
	int *p = A;
	p++;
	// A++; // invalid!! compile error

	printf("Address &A= %lu\n", &A);
	printf("Address A= %lu\n", A);
	
	for (int i=0; i < 5; i++) {
	  printf("Address = %lu\n", &A[i]);
	  printf("Address = %lu\n", A+i);
	  printf("Value = %lu\n", A[i]);
	  printf("Value = %lu\n", *(A+i));
	}

    return 0;
}

Notes:

数组名不能自增。

输出:

Address &A= 140737488347616
Address A= 140737488347616
Address = 140737488347616
Address = 140737488347616
Value = 2
Value = 2
Address = 140737488347620
Address = 140737488347620
Value = 4
Value = 4
Address = 140737488347624
Address = 140737488347624
Value = 5
Value = 5
Address = 140737488347628
Address = 140737488347628
Value = 8
Value = 8
Address = 140737488347632
Address = 140737488347632
Value = 1
Value = 1

二、数组作为函数参数 

当数组作为函数参数时,当传入 数组名[] (A [] ) 并不会将整个数组拷贝一遍,编译器将形参的int A[ ]理解为指针,而非数组。

🍋 数组名作为函数参数,为什么必须传递数组大小?

#include<stdio.h>
// int SumOfElements(int *A)
int SumOfElements(int A[])
{
	int i,sum=0;
	int size=sizeof(A)/sizeof(A[0]);   // 这里是A被理解为一个指针,sizeof(A)=8
	
	printf( "size of A = %d,size of A[0] = %d\n",sizeof(A),sizeof(A[0]) );
 
	for(i=0;i<size;i++)
	{
		sum += A[i];
	}
	return sum;
}
 
int main()
{
	int A[] = {1,2,3,4,5};
	int total= SumOfElements(A);
	
	printf( "数组元素之和 = %d\n",total );
	printf( "size of A = %d,size of A[0] = %d\n",sizeof(A),sizeof(A[0]) );
}

输出

size of A = 8,size of A[0] = 4
数组元素之和 = 3
size of A = 20,size of A[0] = 4

改进

#include<stdio.h>
// int SumOfElements(int *A, int size)
int SumOfElements(int A[], int size)
{
	int i,sum=0;
 
	for(i=0;i<size;i++)
	{
		sum += A[i];
	}
	return sum;
}
 
int main()
{
	int A[] = {1,2,3,4,5};
	int total= SumOfElements(A, sizeof(A)/sizeof(A[0]));
	
	printf( "数组元素之和 = %d\n",total );
}

输出

数组元素之和 = 15

三、指针和字符数组

🍌怎么样存储一个string?

  • (size of array) >= (num of characters in string + 1)
  • 所有的字符串函数均假定字符串以 \0 结束
#include <stdio.h>
#include <string.h>
 
int main()
{
	char C[10];
	C[0] = 'J';
	C[1] = 'O';
	C[2] = 'H';
	C[3] = 'N';
	printf("%s\n",C);	// 打印出乱码
 
	C[4] = '\0';
	printf("%s\n",C);	// 正常打印
 
	printf("字符串长度C=%d\n\n",strlen(C));	  // \0不算入字符串长度
 
	
	char s[] = "GZC";						// 自动计算长度,字符串子面值隐含了\0
	// char s[4] = "GZC";
	// char s[4] = {'G','Z','C','\0'};

	printf("%s\n",s);
	printf("字符串长度s=%d\n",strlen(s));	// \0不算入字符串长度
	printf("size of s=%d\n",sizeof(s));	   // 将\0也计算在内
}

输出

JOHN���
JOHN
字符串长度C=4

GZC
字符串长度s=3
size of s=4

🍉数组和指针是以相似方式使用的不同类型

  • C2和C1在内存上是不一样的,一个以 \0 结尾,一个只是一个指针
  • C2=C1 is valid, C1=C2 is invalid
  • C1++也是invalid的

🍇 例子

上图的指针为4 bytes

char test[] = "hello";    //字符串存放在栈空间,可修改
char *test = "hello";    //字符串存放在只读数据区,不可修改

四、指针与二维数组

🍓  数组在计算机中的组织形式

上面这些可以通过画框法来进行理解

换算公式

五、指针与多维数组

🍈 例子

#include<stdio.h>
 
void func(int A[][2][2])
{
	printf("hello world\n");
}
 
int main()
 
{
	int C[3][2][2] = {{{2, 5}, {7, 9}},
					  {{3, 4}, {6, 1}},
					  {{0, 8}, {11, 13}}};

	printf("%lu %lu %lu %lu \n",C,*C,C[0],&C[0][0]);
	printf("%lu\n",*(C[0][0]+1));
	func(C);
	return 0;
}

输出

140737488347584 140737488347584 140737488347584 140737488347584 
5
hello world

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

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

相关文章

upload-labs关卡记录14

让上传图片马&#xff0c;并且三种后缀都要上传成功才算成功&#xff1a; 先试试gif的吧&#xff1a; 可以上传&#xff0c;同理&#xff1a;查看源码 只检查了两个字节&#xff0c;我们直接修改一句话木马&#xff0c;先改后缀php为png&#xff0c;然后winhex修改头部就完了 …

前端(htmlcss)

前端页面 Web页面 PC端程序页面 移动端APP页面 ... HTML页面 HTML超文本标记页面 超文本&#xff1a;文本&#xff0c;声音&#xff0c;图片&#xff0c;视频&#xff0c;表格&#xff0c;链接 标记&#xff1a;由许多标签组成 HTML页面运行到浏览器上面 vscode便捷插件使用 vs…

HTML——16.相对路径

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><a href"../../fj1/fj2/c.html" target"_blank">链接到c</a><!--相对路径&#xff1a;-->…

coturn docker 项目 搭建【一切正常】

业务需求&#xff1a;需要coturn这个服务 定制语音视频连线 请参考"小红的逃脱外星人追踪计划" coturn项目 本地测试连接服务 turnutils_stunclient -p 3478 127.0.0.1turnutils_stunclient -p 3478 -L 127.0.0.1 127.0.0.1telnet localhost 3478turnutils_uclient …

【回溯】LeetCode经典题目总结:组合、排列、子集、分割、N皇后、单词搜索

回溯 组合问题组合总和全排列子集分割回文串N皇后电话号码的字母组合单词搜索括号生成 组合问题 给定两个整数 n 和 k&#xff0c;返回 1 … n 中所有可能的 k 个数的组合。 示例: 输入: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 树形结构&#xff1…

Linux-frp_0.61.1内网穿透的配置和使用

下载frp frp官网 https://gofrp.org/zh-cn/docs/setup/ frp安装包下载地址 https://github.com/fatedier/frp/releases?page1 下载之后在服务器上 解压 tar -zxvf frp_0.61.1_linux_amd64.tar.gztar&#xff1a;一个用于压缩和解压缩的工具。-z&#xff1a;表示使用 gzi…

WEB攻防-通用漏洞-文件上传-js验证-MIME验证-user.ini-语言特征

目录 定义 1.前端验证 2.MIME验证 3.htaccess文件和.user. ini 4.对内容进行了过滤&#xff0c;做了内容检测 5.[ ]符号过滤 6.内容检测php [] {} ; 7.()也被过滤了 8.反引号也被过滤 9.文件头检测 定义 文件上传漏洞是指攻击者上传了一个可执行文件&#xff08;如木马…

Excel基础知识

一&#xff1a;数组 一行或者一列数据称为一维数组&#xff0c;多行多列称为二维数组&#xff0c;数组支持算术运算&#xff08;如加减乘除等&#xff09;。 行&#xff1a;{1,2,3,4} 数组中的每个值用逗号分隔列&#xff1a;{1;2;3;4} 数组中的每个值用分号分隔行列&#xf…

快速下载pytorch_geometric

注意&#xff1a;千万不要一上去就使用pip去安装&#xff01;&#xff01;&#xff01; 1.找到GitHub手动下载所需依赖: https://github.com/pyg-team/pytorch_geometric 进入网址后点击此处&#xff1a; 2.点击here进去后寻找自己的torch版本&#xff08;我的是torch2.1.2的…

数学建模 绘图 图表 可视化(2)

文章目录 前言柱形图条形图克利夫兰点图系列坡度图南丁格尔玫瑰图径向柱图极坐标图词云图总结参考资料 前言 承接上期 数学建模 绘图 图表 可视化&#xff08;1&#xff09;的总体描述&#xff0c;这期我们继续跟随《Python 数据可视化之美 专业图表绘制指南》步伐来学习其中l…

建造者模式 Builder Pattern

在创建一个对象的时候&#xff0c;构造器参数有点多&#xff0c;而且有些参数还是可选的&#xff0c;再者还有不少同类型的&#xff0c;那就更应该使用 builder 模式了。 使用 Builder 模式的初衷是 把易变性&#xff08;mutability&#xff09;移动到Builder类&#xff0c;而…

【Java】IO流练习

IO流练习 题干&#xff1a; 根据指定要求&#xff0c;完成电话记录、 注册、登录 注册 题干&#xff1a; 完成【注册】功能&#xff1a; 要求&#xff1a; 用户输入用户名、密码存入users.txt文件中 若users.txt文件不存在&#xff0c;创建该文件若users.txt文件存在 输入…

计算机网络:应用层 —— 网络应用模式

文章目录 客户—服务器方式和对等方式客户/服务器方式 (C/S方式)工作流程特点 对等方式 (P2P方式)工作流程P2P 应用特点 客户—服务器方式和对等方式 网络应用程序运行在处于网络边缘的不同的端系统上&#xff0c;通过彼此间的通信来共同完成某项任务。 开发一种新的网络应用…

118.【C语言】数据结构之排序(堆排序和冒泡排序)

目录 1.堆排序 2.冒泡排序 单趟排序的两种情况 情况1.和arr[i]的前一个元素交换,第一次循环结束时i的值为n-1,第二次循环结束时i的值为n-2 情况2.和arr[i]的后一个元素交换,第一次循环结束时i的值为n-2,第二次第一次循环结束时i的值为n-3,... 将单趟排序代码嵌入外循环中…

【图像处理lec9】小波与多分辨率分析

目录 一、背景 1、引出小波变换 2、图像金字塔 &#xff08;1&#xff09;图像金字塔的基本概念 &#xff08;2&#xff09;高斯金字塔 &#xff08;3&#xff09;拉普拉斯金字塔 &#xff08;4&#xff09;金字塔的结构与生成框图 3、子带编码 &#xff08;1&#xf…

ubuntu2204 gpu 没接显示器,如何连接vnc

之前一直用ssh ,一直没接显示器&#xff0c;后来实在不方便&#xff0c;要安个vnc看一下&#xff0c;结果装上就黑了 硬件上&#xff1a;买一个HDMI显卡欺骗器插在设备上。 软件上&#xff1a;装一个虚拟显示器欺骗一下 sudo apt install xserver-xorg-coresudo apt install…

黑神话悟空游戏鼠标光标使用教程与下载

效果图&#xff1a; 鼠标光标特点 这套鼠标光标的设计灵感来源于《黑神话&#xff1a;悟空》游戏中的角色和元素&#xff0c;具有以下特点&#xff1a; • 主题鲜明&#xff1a;光标设计紧扣游戏主题&#xff0c;采用了游戏中的元素&#xff0c;让玩家在使用电脑时也能感受到…

32132132123

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

简述css中z-index的作用?如何用定位使用?

z-index是一个css属性&#xff0c;用于控制元素的堆叠顺序&#xff0c; 如何使用定位用index 1、position&#xff1a;relative&#xff1b; z-index&#xff1b; 相对于自己来定位的&#xff0c;可以根据top&#xff0c;bottom&#xff0c;right&#xff0c;left&#xff…

简单贪吃蛇小游戏的设计与实现

文章目录 1、知识预备1.1 WIN32 API1.1.1 什么是WIN32 API1.1.2 了解部分WIN32 API1.1.2.1 控制台坐标1.1.2.2 控制台光标1.1.2.3 获取键盘按键情况 2.1 宽字符2.1.1 C语言的国际化2.1.2 宽字符的打印 2、 贪吃蛇游戏设计2.1 游戏开始2.2 游戏运行2.2.1 更新分数2.2.2 按键检测…