C++学习---指针与数组

1.数组

由具体详相同数据类型的数据元素按照一定顺序排列而成的集合,由字符数组、常量数组、实数数组和指针数组等。

1.1一维数组

//一维数组的定义
类型 数组名[常量表达式];
float arry[10];
//其中常量表达式为数组大小,不能含有变量

//一维数组的存储
数组名为数组首元素地址,后续元素按照下标顺序连续存储
int a[6];
//说明6个int型数据按照顺序依次排列

//一维数组的初始化
int a[5] = {1,2,3,4,5};
int a[5] = {1,2,3}//可以小于数组元素,后续补0
int a[] = {1,2,3,4,5}//可以不指定长度

//一维数组的引用
数组名[下标]
//从0开始,最大下标为常量表达式减一

1.2多维数组

//二维数组的定义
类型 数组名[常量表达式][常量表达式];
int a[3][4];
//数组的数组,即为包含a[0],a[1],a[2]三个一维数组的数组

//二维数组的存储
从右到左,从上往下一次存储

//二维数组的初始化
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};//依次初始化
int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};//依次逐一初始化时可省略行下标
int a[3][4] = {1,2,3};//省略元素自动补0
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};//
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9}};//

//二维数组的引用
数组名[行下标][列下标];

//多维数组的定义
int a[2][3][4];

1.3字符数组和字符串

//字符数组的定义
char 数组名[常量表达式];
char ch[6];

//字符串
以双引号括起来的字符序列,长度固定的数组可以存放不同长度的字符串,字符串以‘\0‘作为结束的标志

//字符数组的初始化
char ch[5] = {‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘};
char ch2[5] = "abccd";//使用字符串初始化数组时长度减一
char ch3[3][4] = {"abc", "def", "xyz"};

//字符数组元素的引用
数组名[下标];

//字符串处理函数:拷贝、连接、比较、长度<string.h>
strcpy(sto, strom);//注意sto空间足够大
strcat(s1, s2);//注意s1空间足够大
strcmp(s1, s2);//自左向右逐一比较对应字符的ASII码,相等返回0,s1>s2返回正数,s1<s2返回负数
srelen(str);//返回字符串的长度(有效字符的个数)

//String类
使用重载运算符,连接、赋值、拷贝不再需要函数

2.指针

2.1指针的概念

指针:存放变量、数组与函数等的内存地址;

指针变量:存放内存地址(即指针)的变量;

作用:提供一种间接访问变量的手段;

注意:必须先赋值后引用

2.2指针变量定义

//指针变量的定义
类型 *指针变量名;
int *p1;
float *p2;
char *p3;
void *p4;

//指针变量的初始化
类型 *指针变量名 = 内存地址;
int a, *p1;
p1 = &a;
注意:指针不能直接赋以具体值(可以是NULL空指针值),指针必须先赋值后使用

2.3指针运算

引用运算

取地址运算:&(指针变量名)  得到指针变量本身的地址

取内容运算:*(指针变量名)得到指针指向的存储单元的内容

算术运算:与整数N进行加减,表示指针由指向当前位置向前或向后移动指向N个单元

关系运算:判断两个指针是否指向同一单元

3.指针与数组

3.1指向数组的指针

指向一维数组的指针
//指针访问数组元素
int a[10];
int n;
n = *a;//指向数组第一个元素
n = a[5];//指向数组第6个元素
n = *(a + 5);//指向数组第6个元素

//[]访问指针存储的内容
int a[10];
int *p = a;
int n;
n = *a;//指向数组第一个元素
n = p[5];//指向数组第6个元素
n = *(p + 5);//指向数组第6个元素

//指针型变量与数组名指针常量
char ca[10];
char *ch;
ca = &ch;//错误,不能将一个指针值赋予一个数组名
指向多维数组的指针
首地址:数组名
行首地址:数组每一行的地址,相当于组成二维数组的一位数组的地址
元素地址:二维数组具体分量的地址
a[i][j]的地址表示如下:
&a[i][j] = a[i]+j = *(a+i)+j = a[0]+i*m+j//这里有点不太明白
//指向数组元素的指针变量
int a[3][4];
int *p;
p = a[0];//p是指向数组元素的指针,变量存放的是列地址

//指向一维数组的指针变量
int a[3][4];
int (*p)[4];//指向一维数组的指针变量

3.2指向字符串的指针

指针处理字符串是指针处理数组的一种特殊情况;

3.3指针数组和指向指针的指针

指针数组:数组元素均为指针变量的数组;

类型 *数组名[常量表达式];
int *p[5];

指向指针的指针:多级指针

4.指针与函数

4.1指向函数的指针

//即指针指向函数的入口
返回值类型 (*指针变量名)(形参列表);

4.2返回指针值的函数

//即返回值为指针类型
类型 *函数名(形参列表);

原文地址:https://www.cnblogs.com/zouhq/p/10574114.html

时间: 2024-10-05 05:07:20

C++学习---指针与数组的相关文章

C和指针 学习笔记-3.数组与指针

数据名代表首地址 指向数组的指针 #include <stdio.h> extern void iterate(int *p); void main(){ int a[]={1,2,3,4,5}; iterate(a); } void iterate(int *p){ int i; for(i=0;i<5;i++){ printf("%d",*p++); } } 指向一维数组的指针 int (*p)[3] #include <stdio.h> void i

C语言基础学习3:数组与指针

数组元素的指针就是数组元素的地址. 1.指向数组元素的指针 C语言规定数组名(不包括形参数组名,形参数组并不占据实际的内存单元)代表数组中的首元素(即序列为0的元素)的地址. int a[10]; int *p1,*p2; p1 = &a[0]; p2 = a; p1和p2指向同一个数组a[10]. 2.通过指针引用数组元素 按C语言的规定,如果指针变量p已指向数组中的一个元素,则p+1指向同一个数组中的下一个元素,而不是将p的值(地址)简单的加1. 如果p的初值为&a[0],则 (1)

&lt;深入理解C指针&gt;学习笔记和总结 第四章 指针和数组

数组是一个什么玩意: 数组和指针我的理解,有相同之处也有不同之处.因有相同之处,因此一些资料上说,数组和指针本质是相同的.因有不同之处,因此也有一些资料上说,数组和指针是不一样的. 相同之处: 数组名字和指针名字都代表了一个地址. 如:int num[10];num是数组名.函数开辟了一个存储十个整数类型的空间,而num是他们的首地址. int *p; p=(int *)malloc(10*sizeof(int));类似的,p也指向了首地址. 不同之处是,num[10]中的空间位置是在栈中,而

C语言学习笔记--指针和数组的关系

1.数组的本质 (1)数组是一段连续的内存空间 (2)数组的空间大小:sizeof(array_type)*array_size; (3)数组名可看做指向数组第一个元素的常量指针 (4)数组声明时编译器自动分配一片连续的内存空间 ,而指针声明时只分配了用于容纳地址值的 4 字节空间 2.指针的运算 (1)指针是一种特殊的变量,与整数的运算规则为: p + n == (unsigned int)p + n * sizeof(*p); 当指针 p 指向一个同类型的数组的元素时,p+1 指向当前元素的

C语言学习笔记(六) 指针和数组

使用C语言就必然会使用到指针和数组.看下面的代码: int main(int argc, char** argv){     int a[4] = {1,3,5,7};     int *p = a;     int i;     for (i=0; i<4;i++){         printf("i=%d, p[i]=%d, *(p+i)=%d, a[i]=%d, *(a+i)=%d\n",                 i, p[i], *(p+i), a[i], *(

指针和数组学习点滴小结

很多初学者弄不清指针和数组到底有什么样的关系.我现在就告诉你:他们之间没有 任何关系!只是他们经常穿着相似的衣服来逗你玩罢了. 指针就是指针,指针变量在32 位系统下,永远占4 个byte,其值为某一个内存的地址. 指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到. 数组就是数组,其大小与元素的类型和个数有关.定义数组时必须指定其元素的类型 和个数.数组可以存任何类型的数据,但不能存函数. --------------------------------------------

《C专家编程》学习记录——指针和数组相同的地方

一.在普通的表达式中 先看一段简单的代码 char a[8]; a[3]=9; 3[a]=2; printf("a[3] = %d\r\n", a[3]); printf("3[a] = %d\r\n", 3[a]); 结果是: a[3] = 2 3[a] = 2 原因:表达式中的数组名被编译器当做一个指向该数组第一个元素的指针(ANSI C标准),即在表达式中,指针和数组是可以互换的,因为他们在编译器里的最终形式都是指针,并且都可以进行取下标操作.就像加法一样,取

转:浅谈C/C++中的指针和数组(一)

转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242138.html 浅谈C/C++中的指针和数组(一) 指针是C/C++的精华,而指针和数组又是一对欢喜冤家,很多时候我们并不能很好的区分指针和数组,对于刚毕业的计算机系的本科生很少有人能够熟练掌握指针以及数组的用法和区别.造成这种原因可能跟现在大学教学以及现在市面上流行的很多C或者C++教程有关,这些教程虽然通俗易懂,但是在很多关键性的地方却避而不谈或者根本阐述不清楚,甚至很

指针和数组解析

指针和数组 指针和数组是一样的吗? 经常可以看到“数组就是指针”.“数组名就是常量指针”这些说法,但真的是这样吗?让我们先看一下指针和数组的定义. 1. 指针 根据C99标准,指针的定义如下: A pointer type may be derived from a function type or an object type, called the referenced type. A pointer type describes an object whose value provides