首页 > 代码库 > 指针知识梳理9-指针数组
指针知识梳理9-指针数组
1、基本概念
指针数组:本质是数组,数组的每个元素是指针,数组的每个元素可以存储地址。
2、基本定义
(1)先回顾,数组定义基本模型
type a[len];
访问 数组的每个成员用 a[i];
每个成员所占内存大小 sizeof(type);
数组总共占内存大小 sizeof(a) = sizeof(type)*len;
(2)指针数组
如果学会了指针,学会了数组,到了这里就是一个综合应用的问题。
按照以上模型:
----------------------------------------------------------------
type 为 char*
char* a[5];
定义数组a,数组每个元素的类型为 char*,存储地址,a[i]占4个字节。
那么可以写如下代码:
char b;
char c[10];
a[0] = "hello";
a[1] = (char*)malloc(5);
a[2] = &b;
a[3] = &c[0];
type 为 int*
int* a[5];
定义数组a,数组每个元素的类型为 int*,存储地址,a[i]占4个字节。
int b;
int c[10];
a[0] = &b;
a[1] = (int*)malloc(sizeof(int)*5);
a[2] = &c[0];
3、综合一维数组名的含义
参照1,指针与一维数组:http://blog.csdn.net/xiaoliu0518/article/details/32710665
参照2,指针的指针:http://blog.csdn.net/xiaoliu0518/article/details/33329833
模型:
type a[10];
type *p;
p+i 偏移的地址是 i*sizeof(type)
p = &a[0];
p = a;
*(p+i) = p[i];
*(a+i) = a[i];
--------------------------------------------------
如果type为char
char a[10];
char* p;
p = a;
p+i 地址偏移 i个字节,*(p+i)访问1个字节
---------------------------------------------------
如果type为char*
char* a[10];
char** p;
p = a;
p+i 地址偏移 4*i个字节,*(p+i)访问4个字节
3、综合应用
初学者一定要多写多练。
指针数组:本质是数组,数组的每个元素是指针,数组的每个元素可以存储地址。
2、基本定义
(1)先回顾,数组定义基本模型
type a[len];
访问 数组的每个成员用 a[i];
每个成员所占内存大小 sizeof(type);
数组总共占内存大小 sizeof(a) = sizeof(type)*len;
(2)指针数组
如果学会了指针,学会了数组,到了这里就是一个综合应用的问题。
按照以上模型:
----------------------------------------------------------------
type 为 char*
char* a[5];
定义数组a,数组每个元素的类型为 char*,存储地址,a[i]占4个字节。
那么可以写如下代码:
char b;
char c[10];
a[0] = "hello";
a[1] = (char*)malloc(5);
a[2] = &b;
a[3] = &c[0];
a[4] = c;
type 为 int*
int* a[5];
定义数组a,数组每个元素的类型为 int*,存储地址,a[i]占4个字节。
int b;
int c[10];
a[0] = &b;
a[1] = (int*)malloc(sizeof(int)*5);
a[2] = &c[0];
a[3] = c;
请画内存图
3、综合一维数组名的含义
参照1,指针与一维数组:http://blog.csdn.net/xiaoliu0518/article/details/32710665
参照2,指针的指针:http://blog.csdn.net/xiaoliu0518/article/details/33329833
模型:
type a[10];
type *p;
p+i 偏移的地址是 i*sizeof(type)
p = &a[0];
p = a;
*(p+i) = p[i];
*(a+i) = a[i];
--------------------------------------------------
如果type为char
char a[10];
char* p;
p = a;
p+i 地址偏移 i个字节,*(p+i)访问1个字节
---------------------------------------------------
如果type为char*
char* a[10];
char** p;
p = a;
p+i 地址偏移 4*i个字节,*(p+i)访问4个字节
3、综合应用
#include <stdio.h> int main() { char *a[5]; char b[10] = "lilei"; char c[10]; char d = 'm'; char **p = a; a[0] = "hello"; a[1] = (char*)malloc(5); //安全检查。。 a[2] = b; a[3] = c; a[4] = &d; strcpy(a[1],"bye"); strcpy(a[3],a[2]); for(i = 0;i<4;i++) { printf("a[%d] : %s\n",i,a[i]); printf("a[%d] : %s\n",i,p[i]); printf("a[%d] : %s\n",i,*(p+i)); } printf("a[4]:%c\n",*a[4]); printf("a[4]:%c\n", *(*(p+4)) ); }
初学者一定要多写多练。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。