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

基本介绍

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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言 多重指针--整型字符字符串 int**pp

介绍 多重指针:一个指针指向另一个指针 离值越近的指针级别越大:一级 内存布局 代码 图示: 多重指针–整型 #include<stdio.h> #include<string.h> //多重指针--整型//二级指针 void two() {printf("二级指针:\n");int a896;int *p&a,**pp&…

C++ primer 第13章 拷贝控制

文章目录前言拷贝、赋值与销毁拷贝构造函数合成拷贝构造函数拷贝初始化和直接初始化拷贝初始化的发生&#xff1a;参数和返回值拷贝初始化的限制拷贝赋值运算符重载赋值运算符合成拷贝赋值运算符析构函数析构函数完成的工作什么时候会调用析构函数合成析构函数代码片段调用几次…

牛客网C++面经 C++11

请问C11有哪些新特性&#xff1f; auto关键字&#xff1a;编译器可以根据初始值自动推导出类型。但是不能用于函数传参以及数组类型的推导nullptr关键字&#xff1a;nullptr是一种特殊类型的字面值&#xff0c;它可以被转换成任意其它的指针类型&#xff1b;而NULL一般被宏定义…

C语言 返回指针的函数--指针函数 int* max(int a)

定义 strlong示例代码 代码1: #include<stdio.h> #include<string.h> //返回指针的函数//比较两个字符串,返回更长的字符串 char *strlong(char* a,char* b) {char *p1&a[0];char *p2&b[0];while(true){if(*p1\0){return b;}else if(*p2\0){return a;}p1…

第2、3讲 图像的存储格式

本图像处理系列笔记是基于B站杨淑莹老师的课程进行学习整理的。 文章目录黑白图像8位灰度索引图像8位伪彩色索引图像24位真彩色图像图像文件格式BMP文件存储格式BMP文件头位图信息头颜色表位图信息——BITMAPINFO结构BMP位图文件汇总按照颜色深度分类&#xff0c;常用图像文件&…

Ubuntu18.04.4 环境下对属性加密算法CP-ABE环境搭建

注意事项 cpabe依赖pbc&#xff0c;pbc依赖gmp&#xff0c;gmp依赖M4、bison、flex如果权限不够 &#xff0c;命令的前面加上sudo &#xff0c;不要直接使用root用户进行操作&#xff0c;其带来的隐患有很多 第一步 配置简单的环境 简单环境 包括gcc、g、make、cmake、openss…

C语言 函数指针 int(*ptr)(int,int)

基本介绍 函数指针:指向函数的指针 与数组类似 定义 Int(*pmax)(int ,int)max; Int(*pmax)(int x,int y)max;//形参名称不重要 函数返回类型(*指针)(形参类型)函数名称; 具体案例 代码: *pmax取到函数本身 调用函数指针方式: (*pmax)(x,y); pmax(x,y);//与java中调用函数一…

C++ primer 第14章 操作重载与类型转换

文章目录基本概念直接调用一个重载的运算符函数某些运算符不应该被重载使用与内置类型一致的含义选择作为成员或者非成员输入和输出运算符重载输出运算符<<输出运算符尽量减少格式化操作输入输出运算符必须是非成员函数重载输入运算符>>算术和关系运算符相等运算符…

C语言 回调函数 produce(arr,len,getRand)

基本介绍 回调函数:形参中包含另一个函数的函数指针 用函数指针接收另一个函数 案例 代码解析 具体代码 #include<stdio.h> #include<stdlib.h> //回调函数--//函数原型 int getRand(); int *produce(int*arr,int len,int(*get)()); int main() {int arr[10…

C语言 动态内存分配机制(堆区) int*p=malloc(5*sizeof(4))

C程序内存分配图 栈区:局部变量 堆区:动态分配的数据 静态存储区/全局区:全局变量,静态数据 代码区:代码,指令 内存分配说明 内存动态分配的相关函数 堆区: #inlcude<stdlib.h> Malloc(size);//分配长度为size个字节的连续空间 Calloc(n,size);//分配size个长度为n…

C语言 结构体 struct Cat cat1;

引入 使用传统技术解决 需要定义多个变量或数组 结构体与结构体变量的关系示意图 类似Java类中的对象(结构体)与属性(结构体变量) 一切物体都可以看作对象(结构体) 补充:C语言数据类型 简单使用案例 代码 Cat是我们自己定义的数据类型 struct Cat cat1;//创建struct Cat的…

C语言 共用体/联合体 union

引入 传统技术的缺陷—结构体 共用体基本介绍 共用体与结构体一样都是值传递 定义共用体的三种方式 内存布局 共用体数据空间占用最大的成员的数据空间大小 案例解析 1) 2) 3) 4) 注: 1010 1101 0101 0100所对应的十进制是负数 计算机中的二进制都是以补码存储的,所…

C语言 项目练习-家庭收支软件

目标 需求说明 界面说明 登记收入界面: 登记支出界面 收支明细界面 退出界面 项目代码改进要求 自己完成的代码 版本1 #include<stdio.h> #include<string.h> void choose(int button,int i); //项目--家庭收支软件 static double total10000;//总金额 #de…

c++ fmt 库安装和使用示例、clion配置

安装 git clone https://github.com/fmtlib/fmt.gitmake .mkae && make install CLion使用 使用和安装存在出入下载源码&#xff0c;可以先 clone 到你的项目中去&#xff0c;https://github.com/fmtlib/fmt &#xff0c;我放到的是项目的 dependencies 目录然后在…

C语言 项目 CRM系统(客户信息管理系统)

项目目标 项目需求说明 系统界面 1)添加客户界面 通过编号来区分客户 2)删除客户界面 对用户输入的编号进行核查,存在与否,合法与否 3)显示客户列表界面 4)修改客户信息的界面 项目设计 Customer结构体的设计 CRM系统结构框架图 案例代码 #include <stdio.h>…

代码重构 防火墙 相关知识

参考 依据Linux命令以及sysconf下现有的iptables命令&#xff0c;详见hsm_sysconf_server/src/sysconf_server.cpp中的firewall规则。 接口名称 firewall_manager 目的(现实) 根据网口直连获取当前eth0和eth1的各种信息保证设置的正确性 以及要针对管理口和服务口设计不…

C语言 文件的基本介绍

基本介绍 输入流与输出流 重点在C程序(内存)的数据移动方向 对于C程序(内存) 输入数据:输入流 输出数据:输出流 输入 和输出 C标准库 标准输入输出库 标准文件 getchar()&putchar()函数 代码 #include<stdio.h> #include<stdlib.h> //文件--getchar()和…

ubuntu修改字体 样式

使用 快捷键 ctrlaltt 打开终端安装gnome-tweaks桌面管理工具 sudo apt install gnome-tweaksaltf2 在运行窗口输入 gnome-tweaks 命令&#xff0c;然后回车打开优化窗口&#xff0c;选择第二个front字体选项ubuntu显示中文

C语言 文件的读写

引入 OS操作系统 打开文件fopen()函数 读写模式: r:读取已有文件 w:文件不存在,创建文件并写入文件.文件存在,内容清零,再写入文件 a: 文件不存在,创建文件并写入文件.文件存在,以追加的形式写入文件 r:读写已有文件 w:文件不存在,创建文件并读写文件.文件存在,内容清零,再…

StarWind V2V Image Converter:虚拟机镜像转换工具,可将 IMG 文件转换为 VMware VMDK 文件

操作流程 选择本地的需要转换的文件找到源文件的路径&#xff0c;img格式选择转化后的格式 第一个选择 第二个 速度快一些选择将转化后的文件的存储路径软件的下载链接 链接: https://pan.baidu.com/s/1Fe6yI42Zz9d_Q7aUhGe1FQ 提取码: 5vmv