数组指针,指针数组例子解析
//数组与指针
/*
#include<stdio.h>
void main ()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int *p;
int (*q)[10];
p = arr; //数组首元素地址
q = &arr; //数组首地址
//(数组首元素地址的操作)数组元素的引用与表示, 以第0个元素为例
printf("************数组元素的7种基本表示方法*****\n");
printf("----- arr[0] = %d, 0[arr] = %d, *(arr+0) = %d-----\n", arr[0], 0[arr], *(arr+0));
printf("----- p [0] = %d, 0[p] = %d, *(p+0) = %d-----\n", p[0], 0[p], *(p+0));
printf("--- *(int*)q = %d---------------------------------\n", *((int*)q+0));
printf("数组首元素的地址 = %p\n", p);
printf("数组首元素的地址加一后的地址及其值: %p, %d\n", p+1, *(p+1));
//(数组首地址的操作)指针指向的特殊改变
printf("数组首地址 = %p\n", q);
printf("数组首地址加一后的地址及其值:%p, %d\n", q+1, *(int*)(q+1));
}
*/
//指针数组---指针数组的定义初始化和使用
/*
#include<stdio.h>
int main()
{
int a = 1, b = 2, c = 3;
char* arrc[3] = {"aaa", "bbb", "ccc"};
char** parrc = arrc;
int* arri[3] = {&a, &b, &c};
int** parri = arri;
//int* arri[] 地址操作&元素操作
//int* arri[] 地址操作
printf("arri[0] = %p, arri[1] = %p, arri[2] = %p\n", arri[0], arri[1], arri[2]);
printf("arri[0]+1 = %p, arri[1]+1 = %p, arri[2]-2 = %p\n", arri[0]+1, arri[1]+1, arri[2]-2);
printf("*(parri+0) = %p, *(parri+1) = %p, *(parri+2) = %p\n", *(parri+0), *(parri+1), *(parri+2));
//int* arri[] 元素操作
printf("*arri[0] = %d, *arri[1] = %d, *arri[2] = %d\n", *arri[0], *arri[1], *arri[2]);
printf("*(arri[0]+1) = %d, *(arri[1]+1) = %d, *(arri[2]-2) = %d\n", *(arri[0]+1), *(arri[1]+1), *(arri[2]-2));
printf("**(parri+0) = %d, **(parri+1) = %d, **(parri+2) = %d\n", **(parri+0), **(parri+1), **(parri+2));
//char* arrc[] 地址操作&元素操作
//char* arrc[] 地址操作
printf("arrc[0] = %p, arrc[1] = %p, arrc[2] = %p\n", arrc[0], arrc[1], arrc[2]);
printf("parri+0 = %p, parri+1 = %p, parri+2 = %p\n", parri+0, parri+1, parri+2);
//char* arrc[] 元素操作
printf("arrc[0] = %s, arrc[1] = %s, arrc[2] = %s\n", arrc[0], arrc[1], arrc[2]);
printf("*(parrc+0) = %s, *(parrc+1) = %s, *(parrc+2) = %s\n", *(parrc+0), *(parrc+1), *(parrc+2));
return 0;
}
*/
//指针必须初始化才可使用,及指针层面的交换问题
1:int main ( )
2:{
3: char *str[5]={"welcome","to","fortemedia","Nanjing"};
4: char * * p=str+1; //p存储 "to"字符串地址的地址,即&str[1]
5:
6: str[0]=(*p++)+2;//str[0]指向&'\0',然后p后移一位,
//存储"fortemedia"字符串地址的地址,即p = &str[2]
7: str[1]=*(p+1); //p+1 = &str[3];则 str[1] = str[3],
//即str[1]和str[3]都指向同一地址&”Nanjing”
8: str[2]=p[1]+3;//p[1]存储"Nanjing"字符串的地址,为(char *)型,
//p[1]+3相当于p[1]+sizeof(char)*3,
9: //即str[2]指向"Nanjing"字符串中的"jing"地址
10: str[3]=p[0]+(str[2]-str[1]);
//str[3]指向从p[0](也就是*p(str[2]))开始的
//偏移量为3, str[2]指向"jing",即p[0]指向"jing"
11: //所以str[3]指向"jing"的"g"地址
12: printf("%s\n",str[0]); //输出'\0',也即换行
13: printf("%s\n",str[1]); //输出"Nanjing"
14: printf("%s\n",str[2]); //输出"jing"
15: printf("%s\n",str[3]); //输出"g"
16:
17: return 0;
18:}
图解注释:
代码行4:
代码行6:
代码行7:
代码行8:
代码行10:
Other one
1:int main()
2:{
3: char *str[5] = {"welcome","to","fortemedia","Nanjing"};
4: char **p = str + 1; //p存储 "to"字符串地址的地址,即&str[1]是”to”
5: str[0] = *p++; //首先p++,则此时p此时存储了&str[2]时”fortemedir”
//p++仍是p加一之前的值
6: //str[0]相当于str[1]相当于”to”
7: str[1] = *(p+1); //*(p+1)的结果相当于&"Nanjing"
//故str[1]相当于&"Nanjing",相当于str[3]
8: str[2] = p[1] + 3; //p[1]相当于*(p+1),相当于&"Nanjing"
//然后*(p+1)+sizeof(char)*3,则此时str[2]存储
9: //str[2]相当于"Nanjing"字符串中的子字符串&"jing"
10: str[3] = p[0] + (str[2] - str[1]); //str[2] - str[1]的结果为3,
//第五行p[0]相当于str[2],目前存储了(第九行)&"jing"
11: //故str[3]相当于&"g"
14: printf("%s\n",str[0]); //输出"to"
15: printf("%s\n",str[1]); //输出"Nanjing"
16: printf("%s\n",str[2]); //输出"jing"
17: printf("%s\n",str[3]); //输出"g"
18: return 0;
19:}
以下是对上述代码关键行的图解注释:
代码行4:
代码行5:
代码行7:
代码行8:
代码行10:
---------------------
转载于:https://www.cnblogs.com/-lhy-to-s/p/10664907.html
数组指针,指针数组例子解析相关推荐
- 【C/C++和指针】深度解析---指针与数组 【精华】
一,引例子 二维数组可以使用指向数组的指针代替,而指针数组才可以用指向指针的指针代替. [html] view plaincopy #include<iostream> using nam ...
- go语言json字符串解析为结构体数组,结构体指针的数组
废话不多说直接上效果图 完整代码如下 package main import ("encoding/json""fmt" ) // 结构体定义 type rob ...
- 【C语言指针】 回调函数、冒泡函数模拟实现qsort、指针和数组笔试题解析
目录 一.回调函数 定义: 用回调函数形式实现加法运算 二.qsort 函数参数: void指针 用qsort排序整型和结构体 用冒泡函数模拟实现qsort,排序整型和结构体 三.指针和数组笔试题解析 ...
- C++指针遍历数组解析
先遍历一个数组 //创建一个数组int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//创建一个指针指向数组int* p = arr;//数组普通遍历cout << ...
- 通过指针引用数组(包含多种例子,清晰易懂)
大纲浏览 ①数组元素的指针②在引用数组元素时指针的运算③通过指针引用数组元素④用数组名作函数参数⑤通过指针引用多维数组 ①数组元素的指针 一个变量有地址,一个数组包含若干元素,每个数组元素都有相应的地 ...
- 【C语言】深度探索offsetof,解析结构体的成员数组和指针
目录 一.offsetof的功能 二.自定义offsetof 三.探索结构体 3.1结构体中的成员 3.2结构体指针和数组 该篇博客主要讲了自定义offsetof是如何实现的,为什么要这样写,以此沿生 ...
- c/c++ 函数、常量、指针和数组的关系梳理
压力才有动力,15年中旬就要准备实习,学习复习学习复习学习复习学习复习--无限循环中,好记性不如烂笔头--从数组开始,为主干. c 的array由一系列的类型相同的元素构成,数组声明包括数组元素个数和 ...
- 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- 本题主要考查指针与数组
本题主要考查指针与数组 例子1: 解析1:本题主要考查指针与数组.首先通过p = a使p指向数组的第1个元素,所以输出2;在输出2以后,由于p + +,即p就指向数组的第2个元素,* * k就是取出p ...
最新文章
- 机器学习让3D设计速度提升7倍!Adobe最新Substance 3D小白也能入门
- MySQL创建相同表和数据命令
- Windows server2008修改远程桌面端口的方法
- 一些重要的算法The Most Important Algorithms
- 实现类似表格内容动态滚动效果
- 学习JS的心路历程-函式(一)
- Android 笔记一
- Codeforces Round #699 (Div. 2) 题解
- protected访问权限_权限修饰符 /重写
- TCP/IP协议详解 卷一(阅读指导)
- deepnode处理过的图片_教你用PS快速修复图片脏乱和瑕疵,快来一起学习吧!
- HDU-简易版之最短距离(最短路)
- 调查全球 98,000 名程序员发现,PHP 遭厌弃,前端岗已饱和!
- gVim 64位 Windows 7 安装过程 (使用spf13配置)
- informix的常用SQL语句
- 课时2 一些默认样式
- Crypto-js加密解密
- windows7在无法访问Internet的情况下,修改公共网络为家庭网络(或工作网络)
- 字节跳动终于迎来普调,薪资普遍降17%
- JDBC获取数据库(mysql)四种连接方式(connection)
热门文章
- PHP 介绍php的一些基本语法,配合wamp,跟着案例来学习GET和POST请求( 非常详细 )
- 连载|线性判别分析(LDA)
- 2022.5.29 第八次周报
- 微信小程序- 使用git前的初始化
- RT-Thread记录(十、全面认识 RT-Thread I/O 设备模型)
- 3DMAX2020安装卸载教程
- NSW88产品总监田润生:产品与技术与项目与市场与营销与决策与规划与自己
- @分布式存储ceph之RBD
- 【Spring+Mybatis+SpringMVC整合项目五】天猫商城(后台-订单管理开发)
- 解决方案:大疆air遥控器连接不上电脑及模拟器