C的指针和数组】的更多相关文章

类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{...int i;..}a, *p int (*p)(int,int); int add(int a,int b) int **p1; int *p2; int *p3[5]; 赋值方式 p=&a; -- p=a; p=&a p=add; p1=&p2; p1=&p3; 解引用 *…
一.用指针遍历数组元素 1.最普通的遍历方式是用数组下标来遍历元素 1 // 定义一个int类型的数组 2 int a[4] = {1, 2, 3, 4}; 3 4 int i; 5 for (i = 0; i < 4; i++) { 6 printf("a[%d] = %d \n", i, a[i]); 7 } 输出结果: 2.接下来我们用指针来遍历数组元素 先定义一个指针,指向数组的第一个元素 // 定义一个int类型的数组 int a[4] = {1, 2, 3, 4};…
原书很多已经写的很清楚很精炼了,我也无谓做无意义的搬运,仅把一些基础和一些我自己以前容易搞混的地方写一下. 1. 意义: 指针: 指针也是一种类型,长度为4字节,其存放的内容只能是一个地址(4字节). 比如 char* ptr; ptr指向一个地址,而这个地址理想的情况下存放着一个char型数据,特殊情况下也可能会指向NULL,甚至变成野指针. 数组: 数组代表的是一段连续的内存地址,而并非指针那样代表的只是一个地址. 一般数组会有名字,比如 ] ; 即把一段长度为100个sizeof(char…
[源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, const 对象的引用 作者:webabcd 介绍不可或缺 Windows Native 之 C++ this 指针 对象数组 对象和指针 const 对象 const 指针和指向 const 对象的指针 const 对象的引用 示例1.CppEmployee 类CppEmployee.h #pragma…
  指针 与数组 并没有什么关系,   指针就是指针,指针变量在32位系统下,永远占4个byte,其值为某一个内存的地址,指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到;   数组就是数组,其大小与元素的类型和个数有关,定义数组时必须指定其元素的类型和个数,数组可以存储任何类型的数据,但是不能存放函数;;   char *p = "abcdef"; // "abcdef" 放在静态区; 1) 以指针的形式:*(p+4) 这种形式先取出p存储的地址…
1.指针数组数组指针 引用数组 数组的引用 int *a[10] 指针数组 每一个元素都是一个指针 Int (*a)[10] 数组指针 P指向一个含有10个元素的数组 Int (&a)[10] 数组的引用 a是一个数组的引用 Int& a[10] 引用函数 非法 数组的引用:1.在程序体中 int a[10]; Int (&p)[10]=a;//引用数组 2.作为参数 #include <iostream> #include <string> using n…
转载于http://blog.csdn.net/hinyunsin/article/details/6662851     前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在.相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情,一直没有时间静下心来写这些东西,毕竟这确实是一件非常耗费时间和精力的事情:一方面,个人对C语言的掌握和理解也还有限,怕写出来的东西会对大家造成误导.当然,今天写的这些东西也肯…
转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组的一些区别,然而在某些情况下,指针和数组是等同的,下面讨论一下什么时候指针和数组是相同的. C语言标准对此作了说明: 规则1:表达式中的数组名被编译器当做一个指向该数组第一个元素的指针: 注:下面几种情况例外 1)数组名作为sizeof的操作数 2)使用&取数组的地址 规则2:下标总是与指针的偏移量…
再次读的时候实践了一下代码,结果和原文不一致 error C2372: 'p' : redefinition; different types of indirection 不同类型的间接寻址 ////////////////////////////////////////////////      以下是原文    ////////////////////////////////////////////////////////////////////////// 转自:http://www.c…
部分摘自<C语言深度解剖> 1.定义为数组,声明为指针 在文件1中定义: char a[100]; 在文件2中声明: extern char *a; //这样是错误的 这里的extern告诉编译器a这个名字已经在别的文件中被定义了,下面的代码使用的a是在别的文件中定义的.编译器是按文件分别编译的,当a被声明为char* a时,编译器理所当然的认为a是一个指针变量,在32位系统下占用4个byte,这4个byte存放的是地址,地址指向的空间存储的是char类型数据. 程序会返回SIGSEGV. 2…
//指针变量就是用来存储地址的,只能存储地址 格式:  int  *p;  这个p为指针变量:指针变量占8个字节 类型是用来说明这个指针指向的类型: 比如上边的int代表这个指针变量会指向int类型的存储空间: int *p = &a;//这样一句可以写,此时的*只是一个标志,表示这个*只是表示p是个指针: *p = &a;//这样写就错了:此时*p表示取p指向的空间的值:   指针疑问:指针既然都占据8个字节,那么为什么要划分类型, 是因为当用*p指针取值或者赋值的时候,知道该取几个字节…
前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在.相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情,一直没有时间静下心来写这些东西,毕竟这确实是一件非常耗费时间和精力的事情:一方面,个人对C语言的掌握和理解也还有限,怕写出来的东西会对大家造成误导.当然,今天写的这些东西也肯定存在各种问题,不严谨甚至错误的地方肯定有,也希望大家来共同探讨,相互改进. 我会慢慢的写完这几章,有想法的童鞋可以和我探讨…
和指针相关的问题口诀1: 1. 地址变量得地址,得谁地址指向谁 和指针相关的问题要画图: 内容变量画房子,指针画箭头 ---->口 ---------------------------------------------------- 和指针相关的两个特殊运算符: 一."&" 取地址运算符,通过&运算符可以取出普通变量的地址: 二."*"  有两种意义: 1.  为指针标志: 是否为指针标志主要看前面是否有类型,此处有一个int 2.  为指…
C++ Primer Plus 第6版 指针和数组基本等价的原因在于指针算术! 一.指针 ⑴整数变量+1后,其值将增加1: ⑵指针变量+1后,增加的量等于它指向的类型的字节数: ⑶C++将数组名解析为地址: 例如:如果系统对double使用8个字节存储,其数值将增加8,   如果系统对short使用2个字节存储,则指针值将增加2 #include <iostream> int main() { using namespace std; ]={10000.0,20000.0,30000.0};…
一 数组的结构:顺序存储,看谭浩强中的图,牢记 1.数组名指代一种数据结构:数组 现在可以解释为什么第1个程序第6行的输出为10的问题,根据结论1,数组名str的内涵为一种数据结构,即一个长度为10的char型数组,所以sizeof(str)的结果为这个数据结构占据的内存大小:10字节. 再看: . ]; . cout << sizeof(intArray) ; 第2行的输出结果为40(整型数组占据的内存空间大小). 如果C/C++程序可以这样写: . ] intArray; . cout &…
(3)指针和数组 在c中指针和数组似乎有着千丝万缕的关系.事实上它们不是一回事:指针是指针,数组是数组.两者不同样. 说它们有关系,只是是由于常见这种代码: int main() { int array[] = {1,2,3,4,5}; int n = sizeof(array) / sizeof(int); int *p = array; int i; for (i = 0; i < n; i++) printf("p[%d]...%d\n", i, p[i]); system…
1.指针数组和数组指针的内存布局 初学者总是分不出指针数组与数组指针的区别.其实很好理解:指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定.它是"储存指针的数组"的简称.数组指针:首先它是一个指针,它指向一个数组.在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.它是"指向数组的指针"的简称.下面到底哪个是数组指针,哪个是指针数组呢:A) int *p1[10]; B) int (*p2)[10]; 每次上课问这个…
前面写了一些C指针和数组的一些知识,但是还有一些很重要的知识没有交代,这里做一个补充. 首先看一下,普通变量(指针也是变量)和数组名查看地址的方式是不同的. 查看数组变量的地址,不需要使用 & .C,C++语言中,对数组变量的操作,就相当于直接对该数组变量的地址的操作. #include<stdio.h> #include<stdlib.h> int main(void) { ]={,,}; ; int *p = &a; printf("%p\n"…
原文转载地址:http://see.xidian.edu.cn/cpp/html/476.html 在原文的基础上增加自己的思想作为自己的修改 指针数组和数组指针的内存布局 初学者总是分不出指针数组与数组指针的区别.其实很好理解:指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定.它是“储存指针的数组”的简称.数组指针:首先它是一个指针,它指向一个数组.在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.它是“指向数组的指针”的简称. 下面到底哪个…
原文转载地址:http://see.xidian.edu.cn/cpp/html/475.html 在原文的基础上增加自己的想法作为修改 很多初学者弄不清指针和数组到底有什么样的关系.我现在就告诉你:他们之间没有任何关系!只是他们经常穿着相似的衣服来逗你玩罢了. 指针就是指针,指针变量在32 位系统下,永远占4 个byte,其值为某一个内存的地址.指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到. 数组就是数组,其大小与元素的类型和个数有关.定义数组时必须指定其元素的类型和个数…
上一个博客我们得到了一个结论: 指针和数组根本就是两个完全不一样的东西.只是它们都可以“以指针形式”或“以下标形式”进行访问.一个是完全的匿名访问,一个是典型的具名+匿名访问.一定要注意的是这个“以XXX 的形式的访问”这种表达方式. 下面就说说两种东西在“以指针形式”访问和“以下标形式”访问的两种情况在指针和数组上的应用. C语言标准对此作了说明: 规则1:表达式中的数组名被编译器当做一个指向该数组第一个元素的指针: 注:下面几种情况例外 1)数组名(不能是指针)作为sizeof的操作数 2)…
本文转载地址:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242138.html 在原文的基础上加入自己的想法作为修改. 指针是C/C++的精华,而指针和数组又是一对欢喜冤家,很多时候我们并不能很好的区分指针和数组,对于刚毕业的计算机系的本科生很少有人能够熟练掌握指针以及数组的用法和区别.造成这种原因可能跟现在大学教学以及现在市面上流行的很多C或者C++教程有关,这些教程虽然通俗易懂,但是在很多关键性的地方却避而不谈或者根本阐述不…
首先一个列子说明指针和数组真的不是一回事: 浅谈C中的指针和数组(一) 如果用硬是把数组和指针放在一个,一个放声明里一个放定义中,这里就能看到指针和数组名是不同的.这篇文章从符号表的角度分析一下指针和数组名的不同点,两种东西在数据访问的时候的不同点. 有关不同点,再来点更深层次的东西: 浅谈C中的指针和数组(二) 接下来看看指针和数组名的相同点,但是有两点特例.也即是sizeof和&操作的时候,他们表现的对象是不同的. 浅谈C中的指针和数组(三) 下面在看一下指针数组和数组指针这两个东西的区分:…
指向一维数组的指针   char (*p)[10] ;指向一维数组的指针类型 typedef  char(*TYPE_P2ARRAY)[10]  ;   该指针可以指向数组 ,且使用起来效果节本相同,但指针与数组并不等价.{sizeof结果不同  , 且该指针还可以指向除此之外其他类型的数据. } #include <stdio.h> typedef int (*TP_PARRY1)[3] ; #define Uart_Printf printf void f1(void) { int a[2…
C语言指针和数组知识总结(上) 一.指针的基础 1.C语言中,变量的值能够通过指针来改变,打印指针的语句符号可以是:  %08x 2.指针的本质 指针的本质就是变量,那么既然是变量,那么一定会分配地址.只不过指针里面保存的是地址. 3.传递地址和传递值的区别 函数传参数只是一个赋值/拷贝的作用,所以在函数值传递和地址传递有如下区别: 值传递不能改变函数体外部的变量,地址传递可以改变函数体外部的变量. 4.那么什么场合需要用到地址传递呢? 注意两点:  第一个是实现对函数体外部的变量进行修改 第二…
原文:深入理解C指针之四:指针和数组 数组是C内建的基本数据结构,数组表示法和指针表示法紧密关联.一种常见的错误认识是数组和指针完全可以互换,尽管数组名字有时可以当做指针来用,但数组的名字不是指针.数组和指针的区别之一就是,尽管数组的名字可以返回数组地址,但是名字不能作为赋值操作的目标. 概述 数组是能用索引访问的同质元素连续集合.数组的元素在内存中是相邻的,而且元素都是同一类型的.数组的长度是固定的,realloc函数和变长数组提供了应对长度需要变化的数组的技术. 一维数组是线性结构,用一个索…
看<C专家编程>一书,看到数组与指针并不相同一章,遂做了一段测试: 代码: #include <stdio.h> #include <stdlib.h> int main(void) { char *p = "abcdefghijklmn"; printf("%p\n%p\n%p\n",&p,&p[0],p); return 0; } 输出: 可以看到这样的输出,结果很显然: 第一个输出的值,0028FF24,应该…
读懂 函数 + 指针 + 数组 c语言运算符机器优先级,看这里 结合运算符优先级,我们试着读懂函数和指针 优先级简单看 表达式提升():一级优先 函数():二级优先 数组[]:二级优先 指针定义*:三级优先 优先级数越小,优先级越高 小试牛刀:指针函数 & 函数指针 在看了优先级之后,指针函数和函数指针看起来就很简单了 指针函数:返回值是指针的函数 int *f(int a, int b); f 先结合 (),说明是个函数,形参是a和b,返回值是指向int的指针.所以 f 是返回指针的函数 --…
对于指针一直很迷,今天看了一下指针交换数组,知识量很少,希望能帮助到大家. 利用指针来交换数组主要是为了节省时间嘛,有两种交换方式 第一种是写一个函数把数组传过去然后用swap交换,即可 代码如下: #include<iostream>#include<cstdio>#include<ctime>using namespace std;int a[100000050],b[100000050];void da(int *a,int *b){ swap(a,b); cou…
如果我们通过函数的参数将一个数组传递到参数中去,那么在函数里接收到的是什么东西呢?我们知道如果传递一个普通变量,那么参数接收到的是值,如果传递一个指针变量,参数接收到的也是值,只不过这时的值是地址.那么数组是什么?将数组作为值传给一个函数,在函数的参数里有一个数组变量来接收这个数组,看下到底接收到数组变量的什么东西呢?以minmax作为例子来测试下: 在minmax函数中能不能计算出数组a的个数?在minmax和main中分别添加printf函数,从结果可以看出,在main里a的大小是68,而在…