首页 > 其他分享 >解析“字符指针变量,数组指针变量,二维数组”

解析“字符指针变量,数组指针变量,二维数组”

时间:2023-10-15 14:31:58浏览次数:38  
标签:10 arr 变量 int 地址 数组 指针

1. 字符指针变量

字符指针变量是存放地址的

char ch = 'w';
	char* pc = &ch;
	*pc = 'w';

表达式的两个属性: 【值属性】计算后的值是多少 【类型属性】类型是什么

解析“字符指针变量,数组指针变量,二维数组”_数组

注:hello是常量字符串,不能被修改,是连续存放的,可用printf("%s\n", p);打印字符串。

常量字符串指的是在程序中声明的一个不可更改的字符串变量

int main()
{
	char str1[] = "hello bit";
	char str2[] = "hello bit";
	const char *str3= "hello bit";
	const char* str4 = "hello bit";

	return 0;
}

str1str2以字符串的形式对数组进行初始化

str3str4是指针,指向的是字符串,指向的内容是"hello bit"(常量字符串)常量字符串不能被修改

数组名是首元素的地址, 在str3str4中,

指向的是同一块地址, 相同内容保存一份

解析“字符指针变量,数组指针变量,二维数组”_数组_02

2.数组指针变量

指针数组是存放指针的数组 字符指针——指向字符的指针,存放的是字符的地址char ch='w';char *pc=&ch. 整形指针——指向整型的指针,存放的是整型的地址int n=120;int*p=&n 数组指针——指向数组的指针,存放的是数组的地址int arr[10];int(*p)[10]=&arr; 数组指针变量——存放数组地址,指向数组的指针变量int(*p)[10]=&arr;

解析“字符指针变量,数组指针变量,二维数组”_字符串_03

注:p先和*结合,说明p是⼀个指针变量,然后指着指向的是⼀个⼤⼩为10个整型的数组。所以p是⼀个指针,指向⼀个数组,叫数组指针[]的优先级要高于*号的,所以必须加上()来保证p先和*结合。

int *p1[10];//存放指针的数组
int (*p2)[10];//存放数组的指针

解析“字符指针变量,数组指针变量,二维数组”_数组_04

3.二维数组

法一:

void zhizhen_(int arr[3][5], int a, int b)
{
	int i = 0;
	for (i = 0; i < a; i++)
	{
		int j = 0;
		for (j = 0; j < b; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
}

int main()
{
	int arr[3][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15} };
	zhizhen_(arr, 3, 5);



	return 0;
}

法二:(用数组指针)

void zhizhen_(int(*arr)[5], int a, int b)
{
	int i = 0;
	for (i = 0; i < a; i++)
	{
		int j = 0;
		for (j = 0; j < b; j++)
		{
			//printf("%d ", arr[i][j]);
			//printf("%d ", *(arr+i)[j]);
			printf("%d ", *(*(arr + i)+j));


		}
		printf("\n");
	}
}

int main()
{
	int arr[3][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15} };
	zhizhen_(arr, 3, 5);



	return 0;
}

二维数组的每一行是一个一维数组,这个一维数组可以看成是二维数组的一个元素,所以二维数组可以认为是一维数组的数组;二维数组的数组名表示数组首元素的地址,就是第一行的地址,也就是一维数组的地址

解析“字符指针变量,数组指针变量,二维数组”_字符串_05

解析“字符指针变量,数组指针变量,二维数组”_数组_06

第⼀⾏的⼀维数组的类型就是 int [5] ,所以第⼀⾏的地址的类型就是数组指针类型 int(*)[5]那就意味着⼆维数组传参本质上是传递了地址,传递的是第一行这个⼀维数组的地址 ⼆维数组传参,形参的部分可以写成数组,也可以写成指针形式。

标签:10,arr,变量,int,地址,数组,指针
From: https://blog.51cto.com/u_16261646/7872329

相关文章

  • 无涯教程-NumPy - 数组属性
    在本章中,无涯教程将讨论NumPy的各种数组属性。ndarray.shape此数组属性返回一个由数组维组成的元组。它也可以用来调整数组的大小。示例1importnumpyasnpa=np.array([[1,2,3],[4,5,6]])printa.shape输出如下-(2,3)示例2#这会调整ndarray的大小importnump......
  • 【算法题】6939. 数组中的最大数对和
    题目:给你一个下标从0开始的整数数组nums。请你从nums中找出和最大的一对数,且这两个数数位上最大的数字相等。返回最大和,如果不存在满足题意的数字对,返回-1。示例1:输入:nums=[51,71,17,24,42]输出:88解释:i=1和j=2,nums[i]和nums[j]数位上最大的数字相等,且这......
  • 【算法题】88. 合并两个有序数组
    题目:给你两个按非递减顺序排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1的......
  • js对json数组中的json对象去重
    实现思路:使用map()方法将JSON对象转换为字符串,并使用Set对象去除重复项。然后,我们将字符串再次转换为JSON对象,并使用Array.from()方法将其转换为数组。这样,我们就得到了一个去重后的JSON对象数组。 letarr=[{name:'zhangsan',age:10},{name:'lisi',age:30},{name:'zha......
  • Matlab simulink常见问题和数据导出到变量区
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • C语言 通过union共存体释放常量指针指向的堆空间
    union共存体中所有成员占用相同的内存空间。因为free函数参数是void*,常量指针是constvoid*,所以free函数释放常量指针时会因类型不同而失败。#include<stdio.h>#include<malloc.h>#include<string.h>typedefunion_const_ptr{constvoid*cp;void*vp;}co......
  • 09数组
    数组定义方式int[]nums;静态初始化int[]nums1={1,2,3,8,5,2};动态初始化int[]nums2=newint[5]; //表示5个长度的int数组foreach​ 这种方式简单更适合用来打印输出,但是如果要操作某一个数的话是不好用的for(inti:nums1){//foreachnums1.for这......
  • [LeetCode] 1354. Construct Target Array With Multiple Sums 多次求和构造目标数组
    Youaregivenanarray target ofnintegers.Fromastartingarray arr consistingof n 1's,youmayperformthefollowingprocedure:let x bethesumofallelementscurrentlyinyourarray.chooseindex i,suchthat 0<=i<n andsettheva......
  • Go 代码块与作用域,变量遮蔽问题详解
    Go代码块与作用域详解目录Go代码块与作用域详解一、引入二、代码块(Block)2.1代码块介绍2.2显式代码块2.3隐式代码块2.4空代码块2.5支持嵌套代码块三、作用域(Scope)3.1作用域介绍3.2作用域划定原则3.3标识符的作用域范围3.3.1预定义标识符作用域3.3.2包代码块级......
  • #yyds干货盘点# LeetCode程序员面试金典:最小操作次数使数组元素相等
    1.简述:给你一个长度为 n 的整数数组,每次操作将会使 n-1 个元素增加 1 。返回让数组所有元素相等的最小操作次数。 示例1:输入:nums=[1,2,3]输出:3解释:只需要3次操作(注意每次操作会增加两个元素的值):[1,2,3]=>[2,3,3]=>[3,4,3]=>[4,4,4]示例2:输入:nums=[1......