c语言指针,数组
指针:说简单点就是一个地址。例如int *p,p是个变量,里面放的是地址0x0000,同理,每一个指针,不管什么类型,都是地址,也就是空间都是4个字节(32位机)。
以此类推,指针也有指向它的指针int **f,f是一个变量,它指向的是一个指针,f里面放的也是一个地址。也是4个字节。
而且记得放在=号的左右两边是不一样的表示。*p放在右边表示这个值,放在左边表示放这个值的那块空间。
永远记住,只有这个表达式可以表示空间的时候,才能放到左边。
例如说结构EX,typedef struct Node{int a,char b[10]}EX;
EX x={1,{1.,2,3}};
EX *p=&x;
p->b它不可以作为一个左值,因为他这个表达式的意思是表示数组的首地址,它是一个常量。就和数组名称不能做左值一样,因为他也是一个常量。
指针可以指向任何类型。
x=y;x的含义是x所代表的的地址,y的含义是有所代表的地址里面的内容。记住要将等号两边的整体的东西来看,p就是p,*p就是*p,不要缺少东西的看,因为他们表示的东西根本不同。
int a[100];当a作为右值时代表的是数组首元素的地址,和&a[0]一样,但是注意,这仅仅是代表,而没有一个地方来存储这个地址,也就是说编译器并没有为数组a分配一块内存来保存其地址,这一点与指针有很大差别。由此,可见a不能作为左值。编译器会认为数组名作为左值代表的意思是a的首元素的首地址,但是这个地址开始的一块内存是一个总体,我们只能访问数组的某个元素而无法把数组当做一个总体进行访问,我们可以把a[i]当做左值,但是无法把a当做左值。
1.最简单的,对常用变量取址
int a=100;int *p=&a;(int *p;p=&a)
2.指向数组的指针
int vector[10],*vp=vector;这个没什么问题,定义一个整型指针,指向数组的首地址(我们知道,数组名称也表示数组的首地址)
int matrix[3][10];*vp=matrix;这个是不对的,因为matrix不是一个指向整型的指针,它是一个指向整型数组的指针。int (*p)[10],这个表达式要这么理解,因为可以对p进行*操作,所以p肯定是指针,接下来执行下标引用,所以p指向的是某种类型的数组。由于p是指向一个整型数组的指针,所以p+1,p+2它每加一次是要根据10个整型值的长度进行调整。如果需要一个一个移动,那么就是int *p=matrix[0];int
*p=&matrix[0][0];
3.指针数组
int *api[10];这个先要进行下标操作,所以api是一个数组,又由于可以对数组元素做*操作,所以它的元素肯定是指针。所以他是指针数组。
数组:一个连续的空间放着一堆同样类型的东西。这一堆东西可以是任何类型,整型,字符型,指针等等。
我们对于连续的东西,有一个认识,只要知道了第一个的信息,后面的直接加,就可以知道了,所以关键的是表示第一个的信息。
这个时候数组的名字就发挥了作用,数组名可以表示第一个元素的位置,也可以表示本数组的首地址。(这两个概念有区别:别人举了个例子应该很形象&a[0],&a这两个值相同,但意义不同,一个是第一个元素的地址,一个是数组的首地址,就相当于湖南的省政府在长沙,长沙的市政府也在长沙,但代表的意义不同)。
指针和数组的关系
指针和数组没有任何关系。
指针就是指针,指针变量在32位系统下,永远占4个字节,其值为某一个内存的地址,指针可以指向任何地方,但是并不是任何地方你都能通过这个指针变量来访问到。
数组就是数组,其大小与元素的类型和个数有关,定义数组时必须指定其元素的类型和个数。数组可以存任何类型的数据,但是不能存函数。
指针的移动
一个类型为T的指针的移动,是以sizeof(T)为移动单位的。
int a[5]={1,2,3,4,5};&a+1取数组的首地址,该地址加上sizeof(a)的值,即&a+5*sizeof(int),也就是下一个数组的首地址,显然当前指针已经过了界。
*(a+1):a和&a的值是一样的,但是意思不一样,a是数组首元素的地址,也就是a[0]的地址,&a是数组的首地址,a+1是数组的下一个元素的地址,即a[1]的地址,&a+1是下一个数组的首地址。
c语言指针,数组的更多相关文章
- c语言指针数组与数组指针
一.指针数组和数组指针的内存布局初学者总是分不出指针数组与数组指针的区别.其实很好理解:指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定.它是“储存指针的数组”的简称.数 ...
- 【嵌入式开发】C语言 指针数组 多维数组
. 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21402047 . 1. 地址算数运算示例 指针算数运算 ...
- C语言指针数组(每个元素都是指针)
转载:http://c.biancheng.net/cpp/html/3246.html 注意:数组指针的区别 如果一个数组中的所有元素保存的都是指针,那么我们就称它为指针数组.指针数组的定义形式一般 ...
- C语言 指针数组 多维数组
. 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21402047 . 1. 地址算数运算示例 指针算数运算 ...
- c语言 指针数组
指针数组指针数组是数组,指针数组每个元素是一个指针指针数组的定义:type* parray[n]; type* 是数组中每个元素的类型parray 为数组名n为大小 例子:float* a[3] // ...
- C语言 指针数组指针
指向指针数组的指针. 1 #include <stdio.h> 2 3 int main(void) 4 { 5 char *pa[4]={"aaaaa"," ...
- c语言指针数组和结构体的指针
指向数组的指针,先初始化一个数组,使用传统方式遍历 void main() { ] = { ,,,, }; ; i < ; i++) { printf("%d,%x\n", ...
- C语言--指针数组大小
#include <stdio.h> #include <string.h> int main(void) { char *str[3]={ "Hello,thisi ...
- C语言指针【转】
一.C语言指针的概念 在计算机中,所有的数据都是存放在存储器中的.一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细 ...
- C语言入门---第九章 C语言指针
没学指针就是没学C语言! 指针是C语言的精华,也是C语言的难点. 所谓指针,也就是内存的地址,所谓指针变量,也就是保存了内存地址的变量.不过人们往往不会区分两者的概念,而是混淆在一起使用. ===== ...
随机推荐
- JavaWEB - JSP 指令
- Linux下MySQL的数据文件存放在哪里的
mysql> show variables like '%dir%';+-----------------------------------------+------------------- ...
- qduoj 218 签到题
Description a坤和大明在一块由n个方块组成的棋盘(1 × n)上做游戏.一开始a坤在棋盘上放了k个矩形并且没有告诉大明具体位置.每个矩形都占a个连续方块(1 × a),任意两个矩形不可重叠 ...
- IronPython 个人网站样例----宝藏挖掘
IronPython for ASP.NET 的 CTP 已经发布两个多星期了,惭愧的是,因为工作繁忙,一直没有太多时间来学习.居然忽略了 Personal Web Site Starter Kit ...
- 51nod 1486 大大走格子——容斥
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1486 已知起点到某个障碍点左上角的所有点的不经过障碍的方案数,枚举 ...
- SSH不允许Root登陆的方法
不允许Root登陆的方法如下: vim /etc/ssh/sshd_config 把PermitRootLogin yes 改成: PermitRootLogin no 然后重启sshd服务: Ser ...
- POJ3630(Trie树)
Phone List Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26385 Accepted: 7957 Descr ...
- Spring Boot中使用RabbitMQ
很久没有写Spring Boot的内容了,正好最近在写Spring Cloud Bus的内容,因为内容会有一些相关性,所以先补一篇关于AMQP的整合. Message Broker与AMQP简介 Me ...
- VisualGDB系列3:安装VisualGDB
根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指正. 1 系统需求 系统需求如下: Micro ...
- C#事件触发机制
C#的事件触发机制,类似于c++的回调函数机制 我先简单说一下,委托和事件的实质,后期再重开一篇博文来详细说 委托:指向方法的指针,类似于C的函数指针 事件:是一个可以存放0个或多个方法指针的数据结构 ...