基本介绍

1.指针数组:由n个指向整型元素的指针而组成,里面存放指针
Int *ptr[3];

2.地址:
ptr[i]:元素地址
&ptr[i]:指针地址

图示

代码:

内存布局:

代码

#include<stdio.h>
#include<string.h>
//指针数组--int
void pointer(int *arr,int len)
{int i, *ptr[10];for(i=0;i<len;i++){ptr[i]=&arr[i];printf("arr[%d]=%d address=%p\n",i,arr[i],&arr[i]);printf("ptr[%d]=%d address=%p self-address=%p\n",i,*ptr[i],ptr[i],&ptr[i]);}
}//指针数组--char
void cpointer(char* s,int len)
{char *c[4];int i=0;printf("s=%s address=%p self-address=%p\n",s,s,&s);while(i<len){c[i]=&s[i];printf("c[%d]=%c address=%p self-address=%p\n",i,*c[i],c[i],&c[i]);i++;}
}void cpointer2(char *s,int len)
{char *c[4];int i;printf("s=%s address=%p self-address=%p\n",s,s,&s);for(i=0;i<len;i++){c[i]=&s[i];}char *p=c[0];for(i=0;i<len;i++){printf("c[%d]=%c address=%p self-address=%p\n",i,*p,p,&p);p++;}
}
int main()
{int i,arr[10];int len=sizeof(arr)/sizeof(int);char *s="uiop";for(i=0;i<len;i++){arr[i]=99;}printf("int_pointer:\n");pointer(arr,len);printf("char_pointer:\n");cpointer(s,strlen(s));printf("char_pointer2:\n");cpointer2(s,strlen(s));getchar();return 0;
}

输出:

int_pointer:
arr[0]=99 address=010FF984
ptr[0]=99 address=010FF984 self-address=010FF854
arr[1]=99 address=010FF988
ptr[1]=99 address=010FF988 self-address=010FF858
arr[2]=99 address=010FF98C
ptr[2]=99 address=010FF98C self-address=010FF85C
arr[3]=99 address=010FF990
ptr[3]=99 address=010FF990 self-address=010FF860
arr[4]=99 address=010FF994
ptr[4]=99 address=010FF994 self-address=010FF864
arr[5]=99 address=010FF998
ptr[5]=99 address=010FF998 self-address=010FF868
arr[6]=99 address=010FF99C
ptr[6]=99 address=010FF99C self-address=010FF86C
arr[7]=99 address=010FF9A0
ptr[7]=99 address=010FF9A0 self-address=010FF870
arr[8]=99 address=010FF9A4
ptr[8]=99 address=010FF9A4 self-address=010FF874
arr[9]=99 address=010FF9A8
ptr[9]=99 address=010FF9A8 self-address=010FF878
char_pointer:
s=uiop address=006B5814 self-address=010FF894
c[0]=u address=006B5814 self-address=010FF878
c[1]=i address=006B5815 self-address=010FF87C
c[2]=o address=006B5816 self-address=010FF880
c[3]=p address=006B5817 self-address=010FF884
char_pointer2:
s=uiop address=006B5814 self-address=010FF894
c[0]=u address=006B5814 self-address=010FF860
c[1]=i address=006B5815 self-address=010FF860
c[2]=o address=006B5816 self-address=010FF860
c[3]=p address=006B5817 self-address=010FF860

字符数组指针

具体分析

#include<stdio.h>
#include<string.h>
int main()
{char *p[]={"水浒传","三国演义","西游记","红楼梦"};int i=0;printf("方法1:\n");for(i=0;i<4;i++){/*字符指针char *pstr="good dog ww";printf("字符指针指向的字符串内容:%s\n",pstr);所以这里的%s-->p[i]数组:地址传递(指针)%c *pstr是取出一个字符这里不能*p[i],p[i]本身就是一个字符数组指针,无法单独取出一个字符*/
//p[0]="水浒传" %s p[0]就直接是取出字符串printf("p[%d]=%s address=%p self-address=%p\n",i,p[i],p[i],&p[i]);}printf("方法2:\n");char *ptr=p[0];i=0;while(i<=3){printf("p=%s address=%p self-address=%p\n",ptr,ptr,&ptr);i++;ptr=p[i];//每一个p[i]的字符内容不同,导致其间隔不同,所以不能使用ptr++}getchar();return 0;
}

整型数组指针

#include<stdio.h>
#include<string.h>
//整型指针
int main()
{int a=1,b=2,c=4,d=90;int*a1=&a,*a2=&b,*a3=&c,*a4=&d;int *arr[]={a1,a2,a3,a4};int i;printf("方法1:\n");for(i=0;i<4;i++){//arr[0]=a1=&a=1的地址--%d arr[i]只会取到地址//*arr[i]才能取到值printf("arr[%d]=%d address=%p self-address=%p\n",i,*arr[i],arr[i],&arr[i]);}printf("方法2:\n");i=0;int *p=arr[0];while(i<=3){printf("arr[%d]=%d address=%p self-address=%p\n",i,*p,p,&p);i++;p=arr[i];//p++不行 随机存储的,+1不是下一个元素的地址}getchar();return 0;
}

区分

指针数组:
由n个指向整型元素的指针而组成,里面存放指针
Int *ptr[3];

数组指针:
指向一个有n个元素的数组的指针,里面存放的是整型变量(int类型长度为n的数组的首地址),存的是一个数组地址,而不是单个元素
int(*p)[n]
代码详解

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//指针使用 int(*p)[n]与int *p[n]的区别
int main()
{int i;// int(*p)[n]--指向一个有n个元素的数组的指针,里面存放的是整型变量(int类型长度为n的数组的首地址)//存的是一个数组地址,而不是单个元素int a[3]={1,2,3};int b[3][3]={{1,4,0},{2,5,6},{7,6,8}};int(*arr)[3]=b;printf("int(*arr)[n]:\n");for(i=0;i<3;i++){printf("arr[%d]=%d address=%p self-address=%p\n",i,*arr[i],arr[i],&arr[i]);}//int *p[n]--指针数组,由n个指向整型元素的指针而组成,里面存放指针int *p[3];for(i=0;i<3;i++){p[i]=&a[i];}printf("int*p[n]:\n");for(i=0;i<3;i++){//数组printf("arr[%d]=%d address=%p self-address=%p\n",i,*p[i],p[i],&p[i]);}getchar();return 0;
}

C语言 指针数组-字符指针数组整型指针数组 char*s[3] int*a[5] 数组指针int(*p)[4]相关推荐

  1. 2014年去哪儿网笔试题--给定一个整型数组,对这个整型素组排序,使得按序拼接数组各元素得到的值最小

    2014年去哪儿网笔试题--给定一个整型数组,对这个整型素组排序,使得按序拼接数组各元素得到的值最小. 我的大致思路是把这个整型数组转换成String数组,然后通过String类的compareTo方 ...

  2. 26.【C语言】字符串转无符号整型unsignedint、字符串转有符号整型int、无符号整型unsignedint转字符串、有符号整型转字符串(5_task)

    算法思想: 1. 字符串转无符号整型unsignedint 初始化一个字符串str:num用于存放当前转换的整型数,初始化为0.对字符串str中的每个字符进行判断,一旦扫描到当前字符在数字字符的范围之 ...

  3. c语言赋值小数,c语言中将一个浮点型赋值给整型时,会不会四舍五入?

    c语言中将一个浮点型赋值给整型时,不会四舍五入,会直接舍去小数部分的数据,也可以认为是执行了下取整运算. 将浮点数(单双精度)转换为整数时,将舍弃浮点数的小数部分,只保留整数部分.将整型值赋给浮点型变 ...

  4. 我的Go+语言初体验——(6)整型有理数数据类型

    我的Go+语言初体验--(6)整型有理数数据类型 "我的Go+语言初体验" | 征文活动进行中- Go+ 语言使用后缀 'r' 表示有理数,支持整型.分数型.浮点型三种有理数数据类 ...

  5. C#语言中提供了枚举和整型之间的强制转换功能(SelectItem)

    [csharp] view plain copy   <span style="font-family: Arial, Helvetica, sans-serif;"> ...

  6. C语言基本数据类型笔记整理(整型、实型/浮点型、字符型、枚举型、构造类型、指针类型、空类型)

    C语言基本数据类型 一.整型 ①有符号整型 ②无符号整型 二.实型 三.字符型 四.枚举型 五.构造类型 ①数组 ②结构体 ③共用体 六.指针类型 七.空类型 一.整型 ①有符号整型 有符号整型 关键 ...

  7. 浮点型数据2字节_C语言进阶之路:数据类型 - 整型、字符型和浮点型的扩展!...

    整型 int 可添加 short 和 long: short int: 简为 short; long int: 简为 long; long long int: 简为 long long 它们都可以再添 ...

  8. java字符转转长整型_P104 将数字字符串转换成长整型整数 ★★

    所属年份:2011.3;2011.9; 请编函数fun,其功能是将一个数字字符串转换成与其面值相同的长整型整数.可调用strlen函数求字符串的长度. 例如:在键盘输入字符串2345210,函数返回长 ...

  9. C语言加强学习营(二):定义整型的最大值和最小值

    示例 #include <stdio.h> #include <stdint.h>int main(int argc, char **argv) {uint8_t uint8_ ...

  10. C语言字符串类型转换为整型,c语言中将一个字符串转换到整型数据类型的函数是什么?...

    函数是:atoi(),其声明为"int atoi(char *str);".atoi函数的功能是将字符串转为整型并返回:atoi输入的字符串对应数字存在大小限制(与int类型大小有 ...

最新文章

  1. 想学Python?那这套教程再适合不过了!
  2. python领域有什么用-Python语言被广泛用在哪些领域了?
  3. 如何用纯 CSS 创作一个摇摇晃晃的 loader
  4. *Codeforces587E. Duff as a Queen
  5. 一文看懂Transformer到BERT模型
  6. 敏捷个人: 使用必须、应该、可以来确定每天事情的优先级
  7. c语言程序设计--图书管理系统
  8. 关于对发送HTTP请求以及解析服务器返回的数据操作的提取到一个公共类中进行封装
  9. 国土空间规划师提升指南
  10. css animate属性spend不生效
  11. 动态生成ContextMenuStrip
  12. OFBiz + Opentaps 目录管理 四. 产品(四)礼券
  13. 解决crlf 和 lf不同带来的冲突问题
  14. like mybatis 用法_Mybaits中Like 的使用方式以及一些注意点
  15. Thinking in Java 9.6 适配接口
  16. linux 软件源码安装教程,linux源码安装软件步骤
  17. 电脑主机箱前置耳机没声音(window7)
  18. DM笔记之安装1:DM7 For NeoKylin A6
  19. 怎么解决win10以太网无有效ip
  20. 解释程序与编译程序的区别

热门文章

  1. Maven笔记——依赖管理
  2. 任务管理平台_软件品质评测系统任务分发管理平台
  3. python image 转成字节_就是这么流弊!三行Python代码,让数据处理速度提高2到6倍
  4. 基于集成提升和 Bagging 的地下水潜力预测机器学习模型文件阅读
  5. 【转】10个推荐的 PACS/DICOM Server开源项目
  6. 【转】VTK修炼之道2_VTK体系结构1
  7. CSS 基础框盒模型介绍
  8. IIS/ASP.NET 管道
  9. C# async 和 await 理解
  10. Linq找不到行或行已更改