C-指针和数组的区别
指针的操作:
允许:1)同类型指针的赋值
2)与整形的加减运算
3)指向同一数组内指针的减运算和比较
4)赋 ‘0’ 或与 ‘0’ 比较
不允许:1)两指针的相加,相乘除,位移或mask
2)与float,double类型相加
3)不通过类型转换,直接赋予除void*之外的其它类型指针
指针与数组的相同点:
1,a[i]可以用*(a+i)表示
2, 当传递给函数作为实参时,则都是一个地址
指针和数组的区别:
1,数组是一块连续区域,要么是在静态存储区被创建(如全局数组),要么是在栈上被创建,可以更改指向。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,不能更改指向。指针是一个变量,可以++;数组不是一个变量,不可以++
2,sizeof指针表示指针大小,一般为4byte;sizeof数组表示数组占内存大小。
3,数组不可以直接赋值与比较,如果是字符数组要用strcpy和stycmp。指针可以直接赋值,但是赋过去的是地址。比较一般也不比较地址,一般比较内容。
#include <iostream>
#include <string.h>
using namespace std; int main()
{
//difference 1: 指向是否可以更改
//数组内容可变,但是不可以++
char d1a[] = "hello";
d1a[] = 'L';
//d1a++;
cout << d1a << endl;
//指针指向内容可变,也可以++
char* d1p = "world";
//d1p[2] = 'R';
cout << " " << d1p << endl;
//output the address of point to char
cout << "the address of d1p is: "
<< static_cast<void*>(d1p) << endl;
d1p++;
cout << "after ++, the address of d1p is: "
<< static_cast<void*>(d1p) << endl; //difference 2: copy and compare
//ARRAY, 不能使用赋值或者比较
char a[] = "hello";
char b[];
strcpy(b, a); //can't use b = a;
//POINTER, valid
char* pa = "world";
char* pb;
pb = pa; //difference 3: sizeof
cout << "the size of a is: " << sizeof(a) << endl;
cout << "the size of b is: " << sizeof(pa) << endl; }
输出:
$ ./a.exe
heLlo
world
the address of d1p is: 0x445006
after ++, the address of d1p is: 0x445007
the size of a is:
the size of b is:
C-指针和数组的区别的更多相关文章
- C语言中指针和数组的区别
看<C专家编程>一书,看到数组与指针并不相同一章,遂做了一段测试: 代码: #include <stdio.h> #include <stdlib.h> int m ...
- C++指针和数组的区别(不能混用的情况)
通常情况下,C++中指针和数组是可以混用的,但是,在编写字符数组的全排列的时候,混用却出了问题,因此,今天特地mark一下,以备日后查找 这里整理的,不包括用new开辟的动态数组 1.数组一旦声明,我 ...
- 指针与数组的区别 —— 《C语言深度剖析》读书心得
原书很多已经写的很清楚很精炼了,我也无谓做无意义的搬运,仅把一些基础和一些我自己以前容易搞混的地方写一下. 1. 意义: 指针: 指针也是一种类型,长度为4字节,其存放的内容只能是一个地址(4字节). ...
- 上机实践 - - 一个例子了解C/C++中指针与数组的区别
本例子来自于<剑指Offer>(P37) 解答如下: size1:20 data1是一个数组,sizeof(data1)是求数组大小. 这个数组包含5个整数,每个整数4个字节,共20字节. ...
- 转:浅谈C/C++中的指针和数组(一)
再次读的时候实践了一下代码,结果和原文不一致 error C2372: 'p' : redefinition; different types of indirection 不同类型的间接寻址 /// ...
- 浅谈C中的指针和数组(一)
本文转载地址:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242138.html 在原文的基础上加入自己的想法作为修改. 指针是C/C ...
- C语言指针和数组知识总结(上)
C语言指针和数组知识总结(上) 一.指针的基础 1.C语言中,变量的值能够通过指针来改变,打印指针的语句符号可以是: %08x 2.指针的本质 指针的本质就是变量,那么既然是变量,那么一定会分配地址 ...
- C语言中指针和数组
C语言数组与指针的那些事儿 在C语言中,要说到哪一部分最难搞,首当其冲就是指针,指针永远是个让人又爱又恨的东西,用好了可以事半功倍,用不好,就会有改不完的bug和通不完的宵.但是程序员一般都有一种迷之 ...
- 指针 与 数组 以及 a 与 &a的区别
指针 与数组 并没有什么关系, 指针就是指针,指针变量在32位系统下,永远占4个byte,其值为某一个内存的地址,指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到; 数组 ...
随机推荐
- Java编程思想学习笔记_4(异常机制,容器)
一.finally语句注意的细节: 当涉及到break和continue语句的时候,finally字句也会得到执行. public class Test7 { public static void m ...
- xutils使用过程
1,导入xutils的jar包 2,添加xutils需要使用的权限 <uses-permission android:name="android.permission.INTERNET ...
- vitamio框架
import io.vov.vitamio.LibsChecker; import io.vov.vitamio.MediaPlayer; import io.vov.vitamio.MediaPla ...
- C语言语法之占用字节
指针占用字节 指针即为地址,存的是变量的地址,在同一架构下地址长度都是相同的(cpu的最大寻址内存空间),所以不同类型的指针长度都一样. 指针占用几个字节跟语言无关,而是跟系统的寻址能力有关,16为地 ...
- Linux mysql常用操作命令
原文:http://blog.csdn.net/lifuxiangcaohui/article/details/46375931 1.linux下启动MySQL的命令:mysqladmin start ...
- ios CoreBluetooth 警告 is being dealloc'ed while pending connection
ios CoreBluetooth 警告 is being dealloc'ed while pending connection CoreBluetooth[WARNING] <CBPerip ...
- js用ajax和不同页面的php互相传值的方法
js里的代码:<script> var json; //获取所有class名为zhi的标签 var zhi = document.getElementsByClassName('zhi') ...
- EF Core » 影子属性
Caution:注意 This documentation is for EF Core. For EF6.x and earlier release see http://msdn.com/data ...
- js控制手机号码中间用星号代替
$("#tel").html($("#tel").substring(0,3)+"****"+$("#tel").sub ...
- 20145218 《Java程序设计》第01次实验报告
北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.08 实验名称:Java开发环境的熟悉(Linux + Eclipse) 实 ...