C++ 一维数组 二维数组 指针

1、int a[3] = {1, 2, 3}a代表数组的首地址&a[0]也是数组的首地址

2、// int a[2][2] = {0, 1, 2, 3};

// **a 就是 a[0][0] 第一行第一列。// *(*a + 1) 就是 a[0][1] 第一行第二列。// **(a + 1) 就是 a[1][0] 第二行第一列。// *(*(a + 1) + 1) 就是 a[1][1] 第二行第二列。

3、int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};//相当于是a[0][0]=1;
a[0][1]=2;
a[0][2]=3;

4、数组指针int (*ptr)[3] = a; //正确。上面这句代码的意思是,定义一个数组ptr,维数是一维数组,元素是3个,并且定义的是一个指针,指向这个数组的首地址,所以可以把a赋值的,因为a是数组的首地址

5、指针数组
指针数组,就是存放指针的数组,数组里的元素是指针(对比于整型数组,整型数组就是存放整型的数组,数组里的元素是整型)
int *ptr[3];如何理解?按照运算符优先级,[]优先级较大,所以ptr先与[3]结合,表示ptr是一个数组,必然要明确数组的元素类型,所以数组里的元素类型是整型指针(int*),数组的大小不一定需要(定义数组时可以根据初始化的元素个数确定)
ptr[0]就是数组的第零个元素,它是一个整型指针。
示例如下:

1

2

3

4

int a[3] = {1, 2, 3};

int x = 5;

ptr[0] = &x;

ptr[1] = &a[2];

2.如何使用?
像一般指针一样使用。*ptr[0]就是第零个元素(一个指针)所指向元素的值,这里是 5。

6、数组指针
#include "stdafx.h"
int main(int argc, char* argv[]){	int iArr[2][3]={0,1,2,3,4,5};	int *p=iArr[0];//二维数组的首地址	printf("%d \n",p);//1638192	printf("%d \n",iArr);//1638192
	printf("%d ",p[1]);	printf("%d\n",*(p+1));//1
	printf("%d ",p[2]);	printf("%d\n",*(p+2));//2
	printf("%d ",p[3]);	printf("%d\n",*(p+3));//3
	int(*pArr)[3]=iArr;//这句代码的意思是,一个指针,指向三个整型元素  会有多行多列	printf("%d\n",*(pArr));//1638192  1638196  1638200  1638204	printf("%d\n",*(pArr+1));//1638204
	printf("%d\n",*(*(pArr)));//0	printf("%d\n",*(*(pArr+1)));//3	printf("%d ",*(*(pArr+1)+2));//5 
	getchar();	return 0;}
7、一维数组 二维数组 初始化
#include "stdafx.h"
int main(int argc, char* argv[]){	int test[3][3];	for(int i=0;i<3;i++)	{		for(int j=0;j<3;j++)		{			printf("%d ",test[i][j]);		}		printf("\n");	}	//-858993460	858993460	858993460	//-858993460	858993460	858993460	//-858993460	858993460	858993460
	int test2[3][3]={0};	for(int i1=0;i1<3;i1++)	{		for(int j1=0;j1<3;j1++)		{			printf("%d ",test2[i1][j1]);		}		printf("\n");	}	//-0	0	0	//-0	0	0	//-0	0	0
	int test3[3];	for(int hh=0;hh<3;hh++)	{		printf("%d ",test3[hh]);	}	printf("\n");	printf("\n");	//-858993460	858993460	858993460
	int test4[3]={0};	for(int hh1=0;hh1<3;hh1++)	{		printf("%d ",test4[hh1]);	}	printf("\n");	printf("\n");	//0 0 0
	getchar();	return 0;}
8、sizeof 数组 指针sizeof 数组不会退化为指针
#include "stdafx.h"
int main(int argc, char* argv[]){    //此时,传递的数组名不再是指针的作用了	int test[]={0,1,2,3,4,5};	int *p=test;	printf("test 占用的字节数:%d\n",sizeof(test));//24 占用了24个字节	printf("test 占用的字节数:%d\n",sizeof(&test));//24 占用了24个字节	printf("p 占用的字节数:%d\n",sizeof(p));//4 指针占用4个字节
     int test2[20]={0,1,2,3,4,5};	printf("test2 占用的字节数:%d\n",sizeof(test2));//80 占用了80个字节
	getchar();	return 0;}

9、strlen 数组  指针strlen 数组会退化为指针
#include "stdafx.h"#include <string.h>
int main(int argc, char* argv[]){	char *p="123456";	printf("%d\n",strlen(p));//6
	char test[20]={1,2,3,4,5,6};	printf("%d\n",strlen(test));//6
	char test1[]={1,2,3,4,5,6};	printf("%d\n",strlen(test1));//14
	char test2[2]={0};	printf("%d\n",strlen(test2));//0
	char test3[2];	printf("%d\n",strlen(test3));//4
	char test4[20];	printf("%d\n",strlen(test4));//24
	char test5[20]={1};	printf("%d\n",strlen(test5));//1
	char test6[20]={0};	printf("%d\n",strlen(test6));//0
	getchar();	return 0;}
10、指针 数组 作为参数传递
#include "stdafx.h"#include <string.h>
//处理数组void ProcessArray(char arrary[]){	printf("%s\n",arrary);//我的}//处理整型数组void ProcessArray(int arrary[]){	printf("%d\n",arrary[0]);//我的}
//处理指针void ProcessPointer(int *p){	printf("%d\n ",*(p+1));}
//处理引用void ProcessRef(int &p){	printf("%d\n ",p);}
 
int main(int argc, char* argv[]){	char a[10]={"我的"};	int test[10]={0,1,2,3,4,5};	int *p=test;	int k=5;	ProcessArray(a);//我的	ProcessArray(test);//0
	ProcessPointer(p);//1
	ProcessRef(k);//5
	return 0;}
				
时间: 2024-12-30 03:15:21

C++ 一维数组 二维数组 指针的相关文章

C语言学习笔记:18_数组-二维数组

/* * 18_数组-二维数组.c * * Created on: 2015年7月6日 * Author: zhong */ #include <stdio.h> #include <stdlib.h> /** * 二维数组: * 为什么要用二维数组呢; * 例如: 网络班有2个班,每班有5人. * 要想存储一班的学生的年龄 定义一个一维数组搞定 int ages[5]={18,19,20,18,19}; * 然后将两个班中的所有年龄分开存入一个数组中 int classes[2]

数据结构 二维数组--&gt;稀疏数组--&gt;二维数组

稀疏数组基本概念: 稀疏数组应用场景: 当一个数组大部分的元素为"0",或者为同一个值的数组时,可以使用稀疏数组来保存该数组 处理方法: 1>记录数组一共有几行几列,有多少不同的值 2>把具有不同值的元素行列及值记录在一个小规模数组中,从而缩小程序规模 row col val [0]   总行       总列 有效数量 [1]  第一个数据行  第一个数据列 第一个数据值 [2]  第二个数据行 第二个数据列 第二个数据值 二维数组==>稀疏数组思路: 1>遍

C#调用C++ 平台调用P/Invoke 结构体--含有内置数据类型的一维、二维数组、字符串指针【六】

[1]结构体中含有内置数据类型的一维数组 C++代码: typedef struct _testStru3 { int iValArrp[30]; WCHAR szChArr[30]; }testStru3; EXPORTDLL_API void Struct_ChangeArr( testStru3 *pStru ) { if (NULL == pStru) { return; } pStru->iValArrp[0] = 8; lstrcpynW(pStru->szChArr, L&quo

第二十一节(数组概要, 一维、二维数组的声明和使用,数组的排序,数组的查找,)

一维数组:1:/* 数组: 1. 数组是一种引用类型 2. 数组是一种简单的数据结构,线性的机构 3. 数组是一个容器,可以用来存储其他元素, 4. 数组也是可以存储任意数据类型的元素 5. 数组分为: 一维数组,二维数组,三维数组,多维数组 6. 数组中的存储的元素类型 是统一的 7. 数组的长度是不可变的,数组一旦创建长度就是不可变的,固定的 声明数组语法: <1>. 数组元素的类型[] 变量名称 <2>. 数组元素的类型 变量名称[] */ public class Arra

一维、二维数组 与 常用的返回数组 以及 fetch_all与fetch_row的区别

一维数组:单行单列的数组. 二维数组:多行多列的数组.       (至少两行两列) 索引数组: fetch_all() 返回所有数组 fetch_row() 返回一行或一列数组  (第二行需要输入两边,第三行需要输入三遍) 返回关联数组: fetch_assoc() 返回数组含有对象: fetch_object() 返回的数组既有索引又有关联: fetch_array()

php获取一维,二维数组长度的方法(有实例)

在php中获取数组长度方法很简单,php为我们提供了两个函数可以计算一维数组长度,如count,sizeof都可以直接统计数组长度哦,下面我们来看几个实例吧.php如何获取数组的长度,使用php函数count(),或是sizeof()例如: 复制代码代码如下: $arr = Array('0','1','2','3','4'); echo count($arr);// 输出 5$arr = array('A','B','C');echo sizeof($arr);//输出3 sizeof()和c

each处理一维数组二维数组和JS改变屏幕事件

改变屏幕大小事件 window.onresize=function(){ var w=$(window).width(); if((w<1189)){ $('.one').hide(); } } each处理一维数组 $.each(arr,function(i,val)){ alert(i);alert(val) } each处理二维数组 $.each(arr2,function(i,item){ alert(i)输出二维数组有几个数组元素 alert(item) 将输出每一个数组 }) var

C# 数组 二维数组

数组:相同数据类型的元素按一定顺序排列的集合.是一组变量 作用:操作大量数据    数组的定义1.数组里面的内容必须是同一类型2.数据必须有长度限制                               //  定义时限定长度,往后无法更改 一维数组 表达式 1.数据类型[ ] 变量名 = new 数据类型[长度]:              string [ ] s  = new atring [ 5 ];    //定义一个有五个变量的string类型数组 s [0] = "aaa&q

第6章 数组 二维数组互调行列

1.编写java程序,将二维数组中的行列互调显示出来.如: 1 2 3        显示出的结果为:      1 4 7 4 5 6                                    2 5 8 7 8 9                                    3 6 9 package six; public class Sixoneegiht { public static void main(String[] args){ int arr[][]=n