首页 > 代码库 > 指针和数组的区别
指针和数组的区别
针的操作:
允许: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 operation14 char* d1p = "world";15 d1p[2] = ‘R‘;16 cout << " " << d1p << endl;17 //output the address of point to char18 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 compare25 //ARRAY, can‘t use ‘=‘ or ‘<‘26 char a[] = "hello";27 char b[10];28 strcpy(b, a); //can‘t use b = a;29 //POINTER, valid30 char* pa = "world";31 char* pb;32 pb = pa;33 34 //difference 3: sizeof35 cout << "the size of a is: " << sizeof(a) << endl;36 cout << "the size of b is: " << sizeof(pa) << endl;37 38 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。