在做这道题时:

32位环境下,int *p=new int[10];请问sizeof(p)的值为()
A、4              B、10              C、40               D、8

我以为正确答案为C,int类型为32位,占四个字节,10个自然就是40了,结果正确答案为A,只是指针p占的空间。

因此写段代码测试一下:

 #include<iostream>
using namespace std;
void fun(int P[])//P这里作为指针使用
{
cout<<"在函数中"<<sizeof(P)<<endl;
}
int main()
{
int A[];
int* B=new int[];
cout<<"数组名"<<sizeof(A)<<endl;
cout<<"指针"<<sizeof(B)<<endl;
fun(A);
}

或者

 #include<iostream>
using namespace std;
void fun(int *P)
{
cout<<"在函数中"<<sizeof(P)<<endl;
}
int main()
{
int A[];
int* B=new int[];
cout<<"数组名"<<sizeof(A)<<endl;
cout<<"指针"<<sizeof(B)<<endl;
fun(A);
}

结果输出:

数组名40
指针4
在函数中4

由此可见,数组名并不是完全等同于指针。虽然它们都可以通过指针方式访问数组。

但是数组在作为函数参数传递过程中,会退化成指针。这也是为什么指针作为参数传递时,经常要一个长度。(wsj注:指针作为形参时,通常再加上一个形参——这个指针的长度)

转自:http://blog.csdn.net/kangroger/article/details/20653255

sizeof(数组名)和sizeof(指针)的更多相关文章

  1. sizeof数组名和字符指针是有区别的

    sizeof数组名和字符指针是有区别的. #include <stdio.h> #include <stdlib.h> void change(char url[]); int ...

  2. 别混淆了sizeof(数组名)和sizeof(指针)

    我们在挨个儿输出一个数组中的元素时,最常用的就是用一个for循环来实现,简单了事.比如类似下面的代码片段: for(i = 0; i< length; i++) { printf("数 ...

  3. C语言 数组名不是指针

    今天上计算机系统课的时候老师讲到了C中的聚合类型的数据结构.在解释数组名的时候说"数组名是一个指针,指向该数组的第一个元素",附上ppt(第二行): 我觉得这是不正确的,是一个常见 ...

  4. C/C++二维数组名和二级指针

    转载 :https://blog.csdn.net/wu_nan_nan/article/details/51741030  作者:吴一奇 1. 指针1.1 一个指针包含两方面:a) 地址值:b) 所 ...

  5. c语言 数组名是常量指针

    //数组名是常量指针 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include ...

  6. sizeof(数组名) 与 数组长度

    int a[] = {1, 2, 3, 4}; cout << sizeof(a); //16 char b[] = "abc"; cout << size ...

  7. sizeof +数组名

    链接:https://www.nowcoder.com/questionTerminal/daa5422cb468473c9e6e75cc98b771de 来源:牛客网 sizeof一个数组名称的时候 ...

  8. 别人不会给你说的---C语言中数组名和指针的区别 及 sizeof用法

    引自: http://blog.csdn.net/tianyue168/article/details/5781924 #i nclude <iostream.h> int  main( ...

  9. C/C++数组名与指针的区别详解

    1.数组名不是指针我们看下面的示例: #include <iostream> int main() { ]; char *pStr = str; cout << sizeof( ...

随机推荐

  1. 利用recv和readn函数实现readline函数

    在前面的文章中,我们为了避免粘包问题,实现了一个readn函数读取固定字节的数据.如果应用层协议的各字段长度固定,用readn来读是非常方便 的.例如设计一种客户端上传文件的协议,规定前12字节表示文 ...

  2. django 创建数据库表 命令

    一旦你觉得你的模型可能有问题,运行 python manage.py validate . 它可以帮助你捕获一些常见的模型定义错误. 模型确认没问题了,运行下面的命令来生成 CREATE TABLE ...

  3. unity5 静态和动态cubmap

    一,静态cubemap: asserts窗口 右键->Create->Legacy->Cubemap,新建一个cubemap,命名为cubeMap,然后为其各面指定贴图,如图: 需要 ...

  4. servlet中 getRealPath deprecated(被废弃)

    servlet中, HttpRequestServlent req;  req.getRealPath 被废弃,使用this.getServletContext().getRealPath()替代:

  5. Spring Boot(一):初步认识

    简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置 ...

  6. CentOS 6.9升级GCC至7.3.0版本

    1.查看当前centos版本:  cat /etc/redhat-release 2. 安装centos6.9默认的开发工具,包含gcc,g++,make等等一系列工具: yum groupinsta ...

  7. 学习笔记之gethostbyname函数

    我们现在认知一台计算机主机通常采用直观可读的名字.例如博客园我们会记住 www.cnblogs.com 而不是记住42.121.252.58这个IP.对于大多数的应用程序来说应该是处理名字而不是处理地 ...

  8. Linux操作系统及应用课程笔记 索引

    第0部分  软件的安装与配置 Linux下软件的安装与配置 第1部分*   绪论 第2部分*  Linux的安装过程 第3部分   系统Shell和经常使用命令 Shell文件相关经常使用命令及參数总 ...

  9. Linux下NDK的配置

    vim ~/.bashrc 在文件末尾添加如图两行代码 写下来方便复制export NDKROOT=/usr/ndk/android-ndk-r12bexport PATH=$NDKROOT:$PAT ...

  10. 解决Java连接MySQL存储过程返回参数值为乱码问题

    先说MySQL的字符集问题.Windows下可通过修改my.ini内的 [mysql] default-character-set=utf8    //客户端的默认字符集 在MySQL客户端工具中输入 ...