c数组和指针的理解
#include<stdio.h> int main(void)
{
int a[]={,,,,};
int *p = (int*)(&a + );
printf("%d,%d\n",*a+,*(p-)); // int (*ptr1)[] = &a; √
// int (*ptr2)[] = a; ×
// int (*ptr1)[] = &a; ×
// int (*ptr2)[] = a; ×
} //2,5
数组名只可以作为右值!
当我们定义一个数组时候,编译器根据指定的元素个数和类型确定分配内存大小。并把这一块地址的名称赋为数组名称。
a[0]、a[1]......为数组元素,但并非元素名称!
指针,32系统总是为4字节(0x11111111)只能存放一个地址单元的值,所以总是存放的首地址。
但是访问时候需要根据类型大小来移动指针。
数组名:值等同于数组“首元素”的“首地址”(数组首元素的指针)
P + 1
char*移动一个字节,int*移动4个字节!数组指针移动一个数组元素类型长度!二级指针移动一个指针长度(4)!
&a:表示数组指针(取数组变量a的指针)
对数组的访问,总是转换为对指针的访问!
二维数组
int b[][] = {{,},{,}};
// int *p2 = b; ×
// int (*p5)[2] = b; √
// int **p = b; ×
二维数组名称,指向首元素b[0]的指针,为数组指针【一级指针】!
// int *p3 = b[0]; √
// int (*p4)[2][2] = &b; √
二维数组所有元素的访问(一级指针):
#include<stdio.h>
int main()
{
int iArray[][] = {{,,},{,,}};
int *pArray = NULL; pArray = (int*)iArray; printf("array[0][0] = %d\n", *pArray);
printf("array[1][2] = %d\n", *(pArray + ));
printf("array[1][2] = %d\n", *(pArray + * + )); /*数组本身在地址空间中就是连续排列的*/
printf("array[1][2] = %d\n", *((int *)(*((int (*)[])pArray + )) + ));
return ;
}
二维数组所有元素的访问(数组指针):
#include<stdio.h> int main()
{
int iArray[][] = {{,,},{,,}};
int (*pArray)[] = NULL; pArray = iArray; printf("array[0][0] = %d\n", **pArray);
printf("array[1][2] = %d\n", *(*(pArray+)+));
return ;
}
int main()
{
int iArray[][] = {{,,},{,,}}; int (*pArray)[] = NULL; pArray = iArray; printf("array[0][0] = %d\n", pArray[][]);
printf("array[1][2] = %d\n", pArray[][]);
return ;
}
二级指针
为指向指针的指针,指向的值必须是指针。
int main()
{
int iArray[][] = {{,,},{,,}};
int *ipArray[] = {iArray[], iArray[]};
int **pArray = NULL; pArray = ipArray; printf("array[0][0] = %d\n", pArray[][]);
printf("array[1][2] = %d\n", pArray[][]); return ;
}
c数组和指针的理解的更多相关文章
- C语言教学--二维数组和指针的理解
对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...
- C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别
1.一个实例+理论分析 在了解数组和指针的访问方式前提下,下面再看这个例子: main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); pr ...
- 关于c语言二维数组与指针的个人理解及处理办法。
相信大家在学习C语言时,对一维数组和指针的理解应该是自信的,但是,我在学习过程中,看到网上一些博文,发现即便是参加工作的一些专业编程人员,突然碰到二维数组和指针的问题时,也可能会遇到难以处理的诡异问题 ...
- 深入理解C语言中的指针与数组之指针篇
转载于http://blog.csdn.net/hinyunsin/article/details/6662851 前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...
- 对于C语言中数组名是指针的理解
我们都知道,c语言中数组名是一个指针,比如下面这段代码 #include<iostream>using namespace std;int main(){ int a[4]={1,2,3, ...
- 深入理解C语言中的指针与数组之指针篇(转载)
前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在.相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情 ...
- (C初学) 对数组与指针的一些浅显的理解
因为课堂上没听懂,又看不懂教科书(<C语言程序设计教程>第3版 谭浩强,张基温编著)上晦涩的表达方式,昨天晚上特意拿<C语言入门经典>这本书自己研究了一晚的数组与指针. 先来一 ...
- 深入理解C/C++数组和指针
C语言中数组和指针是一种很特别的关系,首先本质上肯定是不同的,本文从各个角度论述数组和指针. 一.数组与指针的关系数组和指针是两种不同的类型,数组具有确定数量的元素,而指针只是一个标量值.数组可以在某 ...
- 程序员之--C语言细节13(二维数组和指针,&*a[i][0]的理解,数组1[e]和e[1]非常可能你没见过)
主要内容:二维数组和指针.&*a[i][0]的理解.数组1[e]和e[1] #include <stdio.h> #define NUM_ROWS 10 #define NUM_C ...
随机推荐
- codeforces 401D (数位DP)
思路:很明显的数位dp,设dp[i][j] 表示选取数字的状态为i,模m等于j的数的个数,那么最后的答案就是dp[(1<<n)-1][0].状态转移方程就是,dp[i|(1<< ...
- Loadrunner通过sitescope监控mysql
1. Loadrunner通过sitescope监控mysql 1.1. Sitescope下载 第一次在网上下载的是sitescope11.30,安装之后无法破解,所以最后卸载了,重新下载了si ...
- 用js将毫秒时间转成正常时间
1. 将毫秒时间转成正常时间 //#region 将毫秒转换成正常的日期 function getDate(time) { var date = new Date(parseInt(time)); v ...
- js实现收缩菜单效果
废话不多说,直接上代码: 有注释 <head> <title></title> <style type="text/css"> di ...
- eventlet的学习
转自:http://bingotree.cn/?p=281 官方网站:http://eventlet.net/ 之前小秦我写了篇python中协程和yield的文章,这里小秦我再总结一下eventle ...
- codeforce 605B. Lazy Student
题意:n点,m条边.m条边里面标记为1的最小生成树的边,0为非最小生成树的边.给了每条边的权,如果能构成一个最小生成树则输出图,否则-1. 思路:先按权值小,为生成数边的顺序排序.(根据kruskal ...
- 开启sa账户以及如何用JDBC进行连接
做实验需要用Java与SQL Server连接,因为使用的 SQL 2008 Express Edition 是基于 Visual Studio2010 安装包安装时一起安装的,所以为了方便数据库的操 ...
- 使用SVN服务器管理源码
最近在学习使用SVN管理自己的项目文件,正好有好的文章就拿来标记一下,正所谓: 站在巨人的肩膀上 天下知识为我所用 转载两篇关于使用SVN管理源码的文章. 使用SVN进行源码管理(上):http: ...
- Unity3D为FirstPersonController添加跑步与下蹲动作
using UnityEngine; using System.Collections; public class MyController : MonoBehaviour { ; ; ; priva ...
- phonegap Overview
PhoneGap 和 Cordova的关系阐述 是PhoneGap贡献给Apache后的开源项目,是从PhoneGap中抽出的核心代码,是驱动PhoneGap的核心引擎.你可以把他想象成类似于Webk ...