指针和数组的区别

针的操作:

  允许:1)同类型指针的赋值

     2)与整形的加减运算

     3)指向同一数组内指针的减运算和比较

     4)赋 ‘0’ 或与 ‘0’ 比较

  不允许:1)两指针的相加,相乘除,位移或mask

      2)与float,double类型相加

      3)不通过类型转换,直接赋予除void*之外的其它类型指针

指针与数组的相同点:

  1,a[i]可以用*(a+i)表示

  2, 当传递给函数作为实参时,则都是一个地址

指针和数组的区别:

  1,数组是一块连续区域,要么是在静态存储区被创建(如全局数组),要么是在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,数组内容可以改变。

  2,指针可以指向任意类型的内存块,可变,我们常用指针来操纵内存块,更灵活也更危险

  3,指针是一个变量,可以++;数组不是一个变量,不可以++

  4,sizeof指针表示指针大小,一般为4byte;sizeof数组表示数组占内存大小。

  5,数组不可以直接赋值与比较,如果是字符数组要用strcpy和stycmp

    指针可以直接赋值,但是赋过去的是地址。比较一般也不比较地址,一般比较内容。

 1 #include <iostream>
 2 #include <string.h>
 3 using namespace std;
 4
 5 int main()
 6 {
 7     //difference 1: point + interger
 8     //ARRAY, invalid operation
 9     char d1a[] = "hello";
10     d1a[2] = ‘L‘;
11     //d1a++;
12     cout << d1a << endl;
13     //POINTER, valid operation
14     char* d1p = "world";
15     d1p[2] = ‘R‘;
16     cout << " " << d1p << endl;
17     //output the address of point to char
18     cout << "the address of d1p is: "
19         << static_cast<void*>(d1p) << endl;
20     d1p++;
21     cout << "after ++, the address of d1p is: "
22         << static_cast<void*>(d1p) << endl;
23
24     //difference 2: copy and compare
25     //ARRAY, can‘t use ‘=‘ or ‘<‘
26     char a[] = "hello";
27     char b[10];
28     strcpy(b, a); //can‘t use b = a;
29     //POINTER, valid
30     char* pa = "world";
31     char* pb;
32     pb = pa;
33
34     //difference 3: sizeof
35     cout << "the size of a is: " << sizeof(a) << endl;
36     cout << "the size of b is: " << sizeof(pa) << endl;
37
38 }

指针和数组的区别

时间: 2024-11-13 22:44:13

指针和数组的区别的相关文章

指针与数组的区别和联系

转载: 一.指针与数组的联系: 指针与数组是C语言中很重要的两个概念,它们之间有着密切的关系,利用这种关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之间的联系及在编程中的应用. 1.指针与数组的关系 当一个指针变量被初始化成数组名时,就说该指针变量指向了数组.如: char str[20], *ptr; ptr=str; ptr被置为数组str的第一个元素的地址,因为数组名就是该数组的首地址,也是数组第一个元素的地址.此时可以认为指针ptr就是数组str(反之不成立),这样

C语言中使用指针与数组的区别

在c语言中,指针和数组名都表示地址,但两者却有很大的不同之处,对于初学者来说一定要弄清楚两者的区别. 首先,我举个简单的例子: char *p1="hello!";  //定义字符型指针p1,并将指针p1指向字符串"hello!"的首地址. char s[10]="hello!";  //定义数组s,并将其初始化赋值. 然而,如果char s[10]; s="hello!";这样就会报错,为什么呢?原因很简单,因为数组名是常量

指针和数组的区别及混淆

1.char* a和char a[] 指针是不分配内存的,它指向的是系统的只读的内存,而数组是分配内存的,就是将系统的只读的内存里面的值复制到它的内存里面,因此可读写. char p[]="abc123ABC" char *p="abc123ABC"; char* p是定义的一个指针..他指向的字符窜"abc123ABC" 是存在不可修改的区域(代码区)的.. 而char p[]是一个数组..他的内容存在栈区可以修改 char p[]="

【指针篇】C语言:指针与数组的区别,数组指针与指针数组的剖析。

指针就是指针,指针变量在 32位系统下,永远占 4  个byte ,其值为某一个内存的地址.指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到. 数组就是数组,其大小与元素的类型和个数有关.定义数组时必须指定其元素的类型和个数.数组可以存任何类型的数据,但不能存函数. 说起指针,就让我们想到数组.而数组和指针也是有区别的.指针,指的是描述一个变量的地址:我们可通过指针的偏移来指向下一个地址.数组,是描述相同元素的一个集合:数组名是常量地址,不可自加不可修改. 我们可以通过数组的下

转:浅谈C/C++中的指针和数组(一)

转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242138.html 浅谈C/C++中的指针和数组(一) 指针是C/C++的精华,而指针和数组又是一对欢喜冤家,很多时候我们并不能很好的区分指针和数组,对于刚毕业的计算机系的本科生很少有人能够熟练掌握指针以及数组的用法和区别.造成这种原因可能跟现在大学教学以及现在市面上流行的很多C或者C++教程有关,这些教程虽然通俗易懂,但是在很多关键性的地方却避而不谈或者根本阐述不清楚,甚至很

指针 指针与数组 指针与字符串 指针与函数 结构体与指针 宏

指针 指针与数组 指针与字符串 指针与函数?? 指针与数组 1.数组名:数组元素首地址 eg: int array[3]={1,3,6}; 这里array 恒等于&array[0] 2.int *p = a; int *p = 0; int a[]={0}; 3.int *p = a; 均指向数组的首地址 *p是? *(p+1)是?(*p)+1是? *(p+1)决定向下移动几个字节是类型 4.指针可以当数组名使用 p[1] = 3; 恒等于a[1] ;恒等于*(p+1);恒等于*(a+1) 5.

什么是指针?什么是数组?指针和数组的关系?

形象地讲,我们可以把计算机的内存看作一条长街上的一排房屋,每个房间都可以容纳数据并通过一个房号来表识.而表示每个房间房号的值我们可以称为地址.或许这样的比喻有局限性,毕竟真实地计算机内存是以数以万计的bit位组成. ⑴初始化: ①最简单的以 int *p 为例,初始化时内存里开辟了四个字节的空间. ▇▇▇▇ ②另一个声明 ,现在,我们有两个变量,下图中显示了后面那个未知内容的内存. char ch = 'a': char cp = &a; ▇→▇▓←(?) (cp)      (ch) ⑵&quo

指针与数组的关联3 --声明

当我们在调用函数时,传递数组,就是把数组首元素的地址传递给函数,本质也就是给函数传递了一个指针变量.这时候我们会想那么数组是不是跟指针是一样的.为了验证,我们可以给一个项目里创建一个新的源文件,里面创建一个指针变量和是个数组,然后在另一个文件中用数组的方法声明指针,在用指针的方法声明这个数组进行调试,看下结果会如何. 我们创建一个test.c文件用来编写主函数,test1.c创建变量编写内容如下: test.c: #include <stdio.h> extern char*arr; exte

C语言学习笔记(六) 指针和数组

使用C语言就必然会使用到指针和数组.看下面的代码: int main(int argc, char** argv){     int a[4] = {1,3,5,7};     int *p = a;     int i;     for (i=0; i<4;i++){         printf("i=%d, p[i]=%d, *(p+i)=%d, a[i]=%d, *(a+i)=%d\n",                 i, p[i], *(p+i), a[i], *(