C数组和指针

C数组和指针

  C语言中的指针与数组这两个概念之间的联系是如此的紧密,以至于如果不能理解一个概念,就无法彻底理解另一个概念。且C对这些概念的处理与其他语言都有所不同。

  1,C语言中只有一维数组,并且数组的大小必须在编译期间就作为一个常数确定下来。由于C语言中的数组的元素可以是任何的类型,当然也可以是另外的一个数组,因此可以“仿真”出多维数组。  

  2,对于一个数组,我们只能够做两件事:确定该数组的大小,以及获得指向该数组下标为0的元素的指针。其他有关数组的所有操作实际上都是通过指针进行的,哪怕看起来再怎么不像指针的操作也是。

  3,如果定义了一个数组a[3],那么,除了a被用于运算符sizeof的参数这种情况,在其他所有的情况下数组名a都代表指向数组a中下标为0的元素的指针;而sizeof(a)得到的是数组a中所有元素的个数,而不是指向数组a的元素的指针大小。

  4,由上一条可知,*a即数组a中下标为0的元素的引用。由于a是指向数组a的位置0的指针,因此a+i就是指向数组a的i位置的指针,*(a+i)就是这个指针的引用,这种写法是如此的常用,因此被简写为a[i](令人震惊的事实)。另外,由于a+i与i+a的含义一样,因此a[i]与i[a]也具有同样的含义。

  5,指针的算数运算:如果一个指针指向数组的一个元素,那么这个指针加1,就得到了指向该数组的下一个元素的指针;如果减1,就的到了指向前一个元素的指针,其他的数字也一样。如果两个指针都指向同一个数组的元素,那么这两个指针的差就是它们两者之间的元素个数;但是如果这两个指针不是指向同一个数组的元素,那么指针减法是无法保证正确性的。两个指针相加毫无意义。

  6,数组的标识符代表的是数组的起始地址,所以数组的标识符不是左值,不能给它赋值,可以把数组的标识符看做是数组起始处的只读指针。当把数组作为函数参数传递时,实际上真正声明的是一个指针(或者另一个说法:当数组作为函数参数传递时,退化为一个指向数组起始位置的指针)。另外,数组只能作为指针传递,且不可以按值传递。

  7,关于二维数组,定义 int cal[12][31],其意思是:cal是一个数组,该数组拥有12个数组类型的元素,其中每个元素都是一个拥有31个整形元素的数组(而不是拥有31个元素,每个元素都是数组元素为12的数组)。

时间: 2024-11-13 07:54:16

C数组和指针的相关文章

数组与指针的区别?

数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.指针可以随时指向任意类型的内存块.    (1)修改内容上的差别 char a[] = "hello";  //它们有各自的内存空间:a[0] = 'X';char *p = "world"; // 注意p 指向常量字符串p[0] = 'X'; // 编译器不能发现该错误,运行时错误 (2) 用运算符sizeof 可以计算出数组的容量(字节数).sizeof(p),p 为指针得到的是一个 指针变量的字节数,

数组与指针

//使用递归来计算阶乘#include<stdio.h>long rfact(int n);int main(){ int num; printf("This program calculate factorials.\n"); printf("Enter a value in the range 0-12(q to quit): \n"); while(scanf("%d",&num)==1) { if(num <0

数组与指针操作

一,数组 1,const int array[5] = {0, 1, 2, 3, 4}; 2,c99新特性,可以对指定的数组的某一个元素初始化.例如:int array[10] = {1, 3, [4] = 2, 6, 7, [1] = 32};如果多次对一个元素进行初始化,取最后一次的值. 3,c不支持把数组作为一个整体来赋值,也不支持用花括号括起来的列表形式进行赋值. 4,sizeof表达式被认为是一个整数常量. 5 * 5 - 1 就是整数常量表达式. 5,变长数组int array[n]

(C/C++)区别:数组与指针,指针与引用

1.数组跟指针的区别 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变. 指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存.指针远比数组灵活,但也更危险. 数组和指针特点的简单比较: 数组 指针 保存数据 保存地址 直接访问数据 间接访问数据,先取得指针的内容,然后以它为地址取得数据 用于存储数目固定且类型相同的数据 通常用于动态数据结构 编译器自动分配和删除

C语言关于数组与指针内容小结

数组的基本概念 什么是数组:数组就是:数组是相同类型的元素的一个集合       类型说明符 数组名 [常量表达式]: 其中,类型说明符是任一种基本数据类型或构造数据类型.数组名是用户定义的数组标识符.方括号中的常量表达式表示数据元素的个数,也称为数组的长度.例如: int a[10]; /* 说明整型数组a,有10个元素 */ float b[10], c[20]; /* 说明实型数组b,有10个元素,实型数组c,有20个元素 */ char ch[20]; /* 说明字符数组ch,有20个元

编程练习之数组与指针

数组与指针 阅读如下代码,为何出错. 1 int main() { 2 char a[] = { "I am a bad boy" }; 3 char * pA = new char[ sizeof( a ) ]; 4 pA = a; 5 6 for ( size_t i = 0; i < sizeof( a ); ++i ) { 7 std::cout << *pA << std::endl; 8 ++pA; 9 } 10 delete [] pA; 1

数组与指针的本质

指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.于是乎,很多程序设计者就被搞糊涂了.而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是指针".很幸运,我的大学老师就是其中之一.时至今日,我日复一日地进行着C/C++项目的开发,而身边还一直充满这样的程序员,他们保留着"数组名就是指针"的误解. 想必这种误解的根源在于国内某著名的C程序设计教程.如果这篇文章能够纠正许多中国程序员对数组名和指针的误解,

【好程序员笔记分享】——数组与指针

ios培训 ------我的c语言笔记,期待与您交流! 前面我们介绍了关于C语言的内存分配问题,下面我们就开始介绍关于C语言的两个非常重要的知识点:数组与指针 数组与指针其实不仅仅是再C语言中,再OC中(当然OC是内部已经帮我们处理好了,但是还有存在大量的指针),C#中,C++中等待一些开发中都是非常常见的,所以作为一个程序员是必须掌握的. 一.数组:相同类型的集合 1:一维数组 平时我们都是申明一个变量,那么如果变量很多我们要怎么做呢,这个时候我们就能用到数组,那么什么是数组呢? 首先来看一个

深入理解 [指针函数] 、[函数指针]、[指针的指针]、[指向指针数组的指针]

指针函数 1.指针函数是指带指针的函数,即本质是一个函数.当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中. 函数返回类型是某一类型的指针: 格式: 类型标识符  *函数名(参数表) int *match(void *key_x,void *key_y); 解析:首先来说它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针

把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)

督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另一个vector,也是将一个vector 的元素逐个赋值给另一vector 的对应元素: //将一个vector 赋值给另一vector,使用迭代器访问vector 中的元素 vector<int> ivec(10, 20); vector<int> ivec1; for (vecto