c语言数组和指针
来源:互联网 发布:单机服装销售软件 编辑:程序博客网 时间:2024/06/06 20:56
数组的定义:数组是一块“同类型”且“连续”的存储空间
1.定义
类型 数组名[长度] 注:长度为常量
2.初始化
定义时并赋初始值 eg:int buf[4]={1,2,3,4};
3.引用:取出变量内容
数组引用元素是从下表为0开始的
数组名[下标]
注:数组名是一块空间的首地址,是常量
类型为type的一个一维数组buf,其长度为n,求第m个元素的地址(m<n)?
fun(n)=buf+sizeof(type)*(m-1);
指针
指针的定义:指针是一个地址,指针指向某一内容(在32/64位系统上,指针就是32/64位无符号整数,任何基类型的指针都是32/64位的)
指针变量:用来存放地址的变量就是指针变量;指针是一个地址,指针变量就相当于指针的名字。
定义方法:基类型 *变量名 eg:int *p;
指针的初始化:基类型 *变量名=地址量; eg:int *p=NULL;
&:&取地址运算符,预算结果可以作为指针 eg:int *p;int i=1; p=&i;
*: *取内容运算符,可以取出指针所指的内容 eg:int *p;int i=1;p=&i; *p的结果就是1。
指针的运算:
(1)以基类型的宽度为单位移动指针
int *p;
p+n: p+sizeof(int)*n;
p-n: p-sizeof(int)*n;
其他类型同理
(2)指针的赋值运算
①把普通变量的地址,赋给同类型指针变量(变量 -> 指针变量)
②把已有地址值得指针变量,赋给另一同类型指针变量(指针变量 -> 另一 指针变量)
③把数组的地址,赋给指针变量(数组 -> 指针变量)
④把零赋给指针
int *p=NULL;
int *q; q=0; //表示指针的状态,什么也不指
指针与数组
1.指针数组
指针的数组,是一个数组,数组中的元素都是指针。
写法:int *a[];
2.数组指针
数组的指针,相当于定义一个指针,这里的指针指向数组,[]中的数就是指向数组的元素个数。
写法: int (*a)[];
数组名就是数组的首地址
补充:
b
-----> b[0] b[0][0] b[0][1]b[0][2]
b+1
-----> b[1] b[1][0] b[1][1]b[1][2]
b+2
-----> b[2] b[2][0] b[2][1]b[2][2]
如上所示:有一个3*3的数组b,我们可以把第一行看成是数组名为b[0]的一维数组,所以b[0]是指向b[0][0]的指针常量,b[0]是b[0][0]的地址,b[i]是b[i][0]的地址,因此我们把3*3的二维数组可以看成b[0],b[1],b[2]
3个一维数组,然后再把b[0],b[1],b[2]看成是一个数组名为b的数组,所以b是指向“元素”b[0]的指针常量,所指向的是原来二维数组的第一行,也就是指向一个一维数组。所以
b和b[0]都是指针,b是指向一个数组,而b[0]是指向数组的一个元素。
指针b[i]+j和*(b+i)+j都是指向数组元素b[i][j]的指针常量。b[i][j]=*(b[i]+j)/*(*(b+i)+j)(二维数组的元素用指针表示的两种方法)
所以关于二维数组的访问方法
(1)下表法:a[i][j]
(2)指针法:*(*(a+i)+j) 注释;a+i代表的是行号,代表的是每一行这个一维数组,所以a+i这个指针指向的是a+i这个一维数组的第一个元素的地址*(a+i),加上列数j,就可以得到元素的具体地址*(*(a+i)+j)
(3)混合法:*(a[i]+j) 注释:a[i]是第i行的一维数组名,所以a[i]指向的是每一行第一个元素的地址,加上列数j,得到元素地址在取内容。
3.指针的指针
int **p 指向指针(地址)的指针变量
多维数组的元素访问:
定义一个比原维少一维的一个数组指针。
二维数组:a[i][j] int (*p)[j]; p=a; *(*(p+i)+j);
三维数组:a[i][j][m] int (*p)[j][m] p=a; *(*(*(p+i)+j)+m);
四维数组:a[i][j][m][n] int (*p)[j][m][n]p=a; *(*(*(*(p+i)+j)+m)+n);
多维数组的元素分配:
二维数组:a[3][4] 总共12个元素,分3份,一份4个元素
三维数组:a[2][3][4] 总共24个元素,第一次分2份,一份12个元素(3*4),第二次每一份再分成3份,每一份4个元素。
四维数组:a[2][3][4][5] 总共120个元素,第一次分2份,每一份60个元素(3*4*5),第二次再将每一份分成3份,每一份20个元素(4*5),第三次再将每一份分成4份,每一份5个元素。
1.定义
类型 数组名[长度] 注:长度为常量
2.初始化
定义时并赋初始值 eg:int buf[4]={1,2,3,4};
3.引用:取出变量内容
数组引用元素是从下表为0开始的
数组名[下标]
注:数组名是一块空间的首地址,是常量
类型为type的一个一维数组buf,其长度为n,求第m个元素的地址(m<n)?
fun(n)=buf+sizeof(type)*(m-1);
指针
指针的定义:指针是一个地址,指针指向某一内容(在32/64位系统上,指针就是32/64位无符号整数,任何基类型的指针都是32/64位的)
指针变量:用来存放地址的变量就是指针变量;指针是一个地址,指针变量就相当于指针的名字。
定义方法:基类型 *变量名 eg:int *p;
指针的初始化:基类型 *变量名=地址量; eg:int *p=NULL;
&:&取地址运算符,预算结果可以作为指针 eg:int *p;int i=1; p=&i;
*: *取内容运算符,可以取出指针所指的内容 eg:int *p;int i=1;p=&i; *p的结果就是1。
指针的运算:
(1)以基类型的宽度为单位移动指针
int *p;
p+n: p+sizeof(int)*n;
p-n: p-sizeof(int)*n;
其他类型同理
(2)指针的赋值运算
①把普通变量的地址,赋给同类型指针变量(变量 -> 指针变量)
②把已有地址值得指针变量,赋给另一同类型指针变量(指针变量 -> 另一 指针变量)
③把数组的地址,赋给指针变量(数组 -> 指针变量)
④把零赋给指针
int *p=NULL;
int *q; q=0; //表示指针的状态,什么也不指
指针与数组
1.指针数组
指针的数组,是一个数组,数组中的元素都是指针。
写法:int *a[];
2.数组指针
数组的指针,相当于定义一个指针,这里的指针指向数组,[]中的数就是指向数组的元素个数。
写法: int (*a)[];
数组名就是数组的首地址
补充:
b
-----> b[0] b[0][0] b[0][1]b[0][2]
b+1
-----> b[1] b[1][0] b[1][1]b[1][2]
b+2
-----> b[2] b[2][0] b[2][1]b[2][2]
如上所示:有一个3*3的数组b,我们可以把第一行看成是数组名为b[0]的一维数组,所以b[0]是指向b[0][0]的指针常量,b[0]是b[0][0]的地址,b[i]是b[i][0]的地址,因此我们把3*3的二维数组可以看成b[0],b[1],b[2]
3个一维数组,然后再把b[0],b[1],b[2]看成是一个数组名为b的数组,所以b是指向“元素”b[0]的指针常量,所指向的是原来二维数组的第一行,也就是指向一个一维数组。所以
b和b[0]都是指针,b是指向一个数组,而b[0]是指向数组的一个元素。
指针b[i]+j和*(b+i)+j都是指向数组元素b[i][j]的指针常量。b[i][j]=*(b[i]+j)/*(*(b+i)+j)(二维数组的元素用指针表示的两种方法)
所以关于二维数组的访问方法
(1)下表法:a[i][j]
(2)指针法:*(*(a+i)+j) 注释;a+i代表的是行号,代表的是每一行这个一维数组,所以a+i这个指针指向的是a+i这个一维数组的第一个元素的地址*(a+i),加上列数j,就可以得到元素的具体地址*(*(a+i)+j)
(3)混合法:*(a[i]+j) 注释:a[i]是第i行的一维数组名,所以a[i]指向的是每一行第一个元素的地址,加上列数j,得到元素地址在取内容。
3.指针的指针
int **p 指向指针(地址)的指针变量
多维数组的元素访问:
定义一个比原维少一维的一个数组指针。
二维数组:a[i][j] int (*p)[j]; p=a; *(*(p+i)+j);
三维数组:a[i][j][m] int (*p)[j][m] p=a; *(*(*(p+i)+j)+m);
四维数组:a[i][j][m][n] int (*p)[j][m][n]p=a; *(*(*(*(p+i)+j)+m)+n);
多维数组的元素分配:
二维数组:a[3][4] 总共12个元素,分3份,一份4个元素
三维数组:a[2][3][4] 总共24个元素,第一次分2份,一份12个元素(3*4),第二次每一份再分成3份,每一份4个元素。
四维数组:a[2][3][4][5] 总共120个元素,第一次分2份,每一份60个元素(3*4*5),第二次再将每一份分成3份,每一份20个元素(4*5),第三次再将每一份分成4份,每一份5个元素。
阅读全文
0 0
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言 数组指针和指针数组
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言--指针数组和数组指针
- c语言指针和数组
- C语言指针和数组
- C语言指针和数组
- react-router 路由匹配
- 51nod 1405 树的距离和
- 阿里巴巴在线测试题
- Cow Sorting POJ
- [LeetCode] 20. Valid Parentheses
- c语言数组和指针
- 浅淡 vue-cli
- 简单回合制小游戏
- String类中一些常用方法的介绍和示例
- 酒客项目日志20170728
- Ubuntu16.04 源码安装turtlebot
- Xamarin for iOS 11(一)
- #2017 Multi-University Training Contest 2 1003
- sql存储过程例子