为学IOS,进击中...之C语言指针练习
2015-07-29 08:53
316 查看
使用用指针,给你数组 int a[] = {4,34,32,13,15,66};(a + 1),输出*a + 1,*(ptr1 - 1),*ptr2);并给出求解过程.
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a[] = {4,34,32,13,15,66};
int *ptr1 = (int *)(&a + 1);
/*
(&a+1)代表储存数组a[]内存地址的后面一块内存的地址,*(&a+1)代表对a[]数组后面的那个地址取值,ptr1代表此值的地址.
后面输出的 (ptr1 - 1) 是又回到了数组a[]本身的内存地址内,而且是内部最后一个小的内存地址,*(ptr1 - 1)是取出这个值
*/
int *ptr2 = (int *)&a + 1;
printf("%d %d %d %d\n",*(a + 1),*a + 1,*(ptr1 - 1),*ptr2);
/*
(a+1)是在数组a[]内部 存储a[0]的地址到紧挨着的a[1]的地址,依然在a[]这个大的空间内,相当数组的下标从0+1. *(a+1)是取出对应地址内的数值
*a + 1是先取出地址a内存储的值,然后这个值+1,
*/
return 0;
/* 此函数输出的结果:
imacdeiMac-18:desktop imac$ cc zhizhenzuoye.c
imacdeiMac-18:desktop imac$ ./a.out
34 5 66 34
*/
}
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a[] = {4,34,32,13,15,66};
int *ptr1 = (int *)(&a + 1);
/*
(&a+1)代表储存数组a[]内存地址的后面一块内存的地址,*(&a+1)代表对a[]数组后面的那个地址取值,ptr1代表此值的地址.
后面输出的 (ptr1 - 1) 是又回到了数组a[]本身的内存地址内,而且是内部最后一个小的内存地址,*(ptr1 - 1)是取出这个值
*/
int *ptr2 = (int *)&a + 1;
printf("%d %d %d %d\n",*(a + 1),*a + 1,*(ptr1 - 1),*ptr2);
/*
(a+1)是在数组a[]内部 存储a[0]的地址到紧挨着的a[1]的地址,依然在a[]这个大的空间内,相当数组的下标从0+1. *(a+1)是取出对应地址内的数值
*a + 1是先取出地址a内存储的值,然后这个值+1,
*/
return 0;
/* 此函数输出的结果:
imacdeiMac-18:desktop imac$ cc zhizhenzuoye.c
imacdeiMac-18:desktop imac$ ./a.out
34 5 66 34
*/
}
相关文章推荐
- 为学IOS,进击中...之C语言指针练习
- C++函数指针
- 【OC-2】OC语言基础二(自定义初始化、点语法)(连载二)
- Box2D C++教程 第一节:简介
- 中国大学MOOC-翁恺-C语言程序设计习题集 08-2 到 10-2
- C++ outline and interview questions (3): Class
- 中国大学MOOC-翁恺-C语言程序设计习题集 10-3 到 11-1
- Google C++ Coding Style:引用参数
- [C++]strcpy和strcpy_s安全性比较
- C++ Pragma 预处理指令
- C++对象模型——关键词所带来的差异(第一章)
- Java学习--(三)变量与常量与与C++的一些区别
- 开发一款C语言小游戏——骑士飞行棋
- c/c++对数组取地址
- c++成员指针笔记
- POJ 1273 最大流入门题 Edmonds_Karp算法
- c++编写断点续传和多线程下载模块【转】
- C\C++ 程序的编译过程
- 堆排序
- Visual C++ 2015 下的 enable_shared_from_this 原理简析