C/C++小课之数组名是什么】的更多相关文章

我们今天讨论数组名是什么东西,理解它有助于我们进一步理解和使用指针. 因为它涉及到了内存地址. 问题 数组名是什么?含义是什么? 思路 前提 一个值+1之后的变化可以反映出它的意义/含义. 前提的证明 其实不证自明,计算机中就是这样的. 生活中 一个苹果+1,结果是两个,增加了一个苹果. 一箱苹果+1,结果是两箱,个数是2*每箱苹果数,增加了一箱苹果. 计算机中 int型变量的地址+1,增加了一个int的大小. double型变量的地址+1,增加了一个double的大小. 思路 根据前提,通过将…
内容简介 1.课程大纲 2.第二部分第三课: 数组 3.第二部分第四课预告:字符串 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量类型 文件读写 动态分配…
今天上计算机系统课的时候老师讲到了C中的聚合类型的数据结构.在解释数组名的时候说"数组名是一个指针,指向该数组的第一个元素",附上ppt(第二行): 我觉得这是不正确的,是一个常见的由"简化"产生的错误,数组名 != 指针.数组名是一个标识符,它标识出我们之前申请的一连串内存空间,而且这个空间内的元素类型是相同的--即数组名代表的是一个内存块及这个内存块中的元素类型 .只是在大多数情况下数组名会"退化"(C标准使用的decay和converted…
今天上计算机系统课的时候老师讲到了C中的聚合类型的数据结构.在解释数组名的时候说"数组名是一个指针,指向该数组的第一个元素",附上ppt(第二行): 我觉得这是不正确的,是一个常见的由"简化"产生的错误,数组名 != 指针.数组名是一个标识符,它标识出我们之前申请的一连串内存空间,而且这个空间内的元素类型是相同的--即数组名代表的是一个内存块及这个内存块中的元素类型 .只是在大多数情况下数组名会"退化"(C标准使用的decay和converted…
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:MapReduce是Hadoop的核心,是Google提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(化简)",及他们的主要思想,都是从函数式编程语言借来的,还有从矢量编程语言借来的特性. 本文分享自华为云社区<[云小课]EI第…
指针的算术运算符是指针和数组之间的一种关联,但不是唯一关联: 可以使用数组名作为指向数组第一个元素的指针,但是不可以给数组名赋新的值. //如下声明a int a[10]; //用a作为指向数组第一个元素的指针,可以修改a[0]; *a = 11; //通过a + 1来访问a[1]; *(a + 1) = 22; 但是试图使数组名指向其他地方是错误的: #include <stdio.h> int main() { char arr[] = "yangxunwu"; whi…
//在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’:输出这个数组中的所有元素. char [][]y=new char [10][10]; for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { if(i==j||i+j==9) { y[i][j]='*'; } else { y[i][j]='#'; } } } for(int i =0;i<10;i++) { for(int k…
//数组名是常量指针 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> //char (*pin)[20]二维数组指针的定义 ], int pinlen,const char * pkey, char *pout){ //定义返回key ; //形参非空校验 if (pin == NULL) { ERRO_MSG = ; printf("…
http://blog.csdn.net/zdcsky123/article/details/6517811 相信不少的C语言初学者都知道,数组名相当于指针,指向数组的首地址,而函数名相当于函数指针,指向函数的入口地址.现在又这样一个问题,如果对数组名取地址,那得到的会是什么呢?很多人立刻会想到:给指针取地址,就是指针的指针,既二级指针嘛!当然这样的结论是错误的,不然这篇笔记也就没有意义了. 下面我们来逐步分析,下面是一段验证这个问题的代码 #include <stdio.h> ]={,,,,…
1.数组名不是指针我们看下面的示例: #include <iostream> int main() { ]; char *pStr = str; cout << sizeof(str) << endl; cout << sizeof(pStr) << endl; ; } 输出结果:104由输出结果可知,数组名并不是指针. 2.数组名神似指针上例我们证明了数组名不是指针,但第5行,char *pStr = str; 程序将数组名直接赋给指针,这显得…
pre{ line-height:1; color:#1e1e1e; background-color:#f0f0f0; font-size:16px;}.sysFunc{color:#627cf6;font-style:italic;font-weight:bold;} .selfFuc{color:#800080;} .bool{color:#d2576f;} .condition{color:#000080;font-weight:bold;} .key{color:#000080;} .…
我们都知道,c语言中数组名是一个指针,比如下面这段代码 #include<iostream>using namespace std;int main(){ int a[4]={1,2,3,4}; for(int i=0;i<4;i++) {  cout<<*(a+i);//*(a+i)和a[i]是等价的.  cout<<endl; } return 0;} 但是看下面这个代码 #include<iostream>using namespace std;…
作者 : 卿笃军 你有没有想过,对一个一维数组名取地址,然后用这个地址进行加减运算.这会出现什么样的结果呢? 演示样例: int a[5] = {1,2,3,4,5}; int *p = (int *)(&a+1); printf("%d\n",*(p-1)); 这个输出会是多少呢? 咦?为什么第二行须要强制转化类型呢? 答:a是一个一维数组的名字,&a相当于一个指向一维数组的指针.怎么感觉这么熟悉?指向数组的指针,那不就是行指针吗?int (*p)[]. 行指针+1,…
数组的声明方式: var add=new array(元素1,元素2,元素3......); 推荐的数组声明方式: var add=[元素1,元素2,元素3,元素4....]; 数组遍历方式: 循环遍历数组,使用for in 语法: for(var i in 数组名){ alert(数组名[i]); } 实例: function GetMax(nums) {  //创建方法,传入一个数组  var maxvalue = nums[0]; //定义默认的最大值为数组的第一位数 for (var i…
指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.于是乎,很多程序设计者就被搞糊涂了.魔幻数组名请看程序(本文程序在WIN32平台下编译): #include <iostream> using namespace std; int main() { char str[10]; char* pStr = str; cout << "sizeof(str): \t" << sizeof(str) <<…
指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.于是乎,很多程序设计者就被搞糊涂了.而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是指针".很幸运,我的大学老师就是其中之一.时至今日,我日复一日地进行着C/C++项目的开发,而身边还一直充满这样的程序员,他们保留着"数组名就是指针"的误解. 想必这种误解的根源在于国内某著名的C程序设计教程.如果这篇文章能够纠正许多中国程序员对数组名和指针的误解,…
数组名取地址所算数运算应注意的"trap" 直接看代码: #include <stdio.h> int main() { int array[5]; printf("array : %p\n",array); printf("array + 2 : %p\n",array+2); printf("&array + 2 : %p\n",&array+2); return 0; } 程序输出是: 数组名…
参考: CSDN::C/C++中数组名退化为指针的情况 stackoverflow::What is array decaying? 起因 笔者在写memset的时候总想偷一点懒(因为我们一般都是为了清零),于是一般都会有下面的写法: #include <iostream> #include <string.h> #define memset(_) memset( (_) ,0,sizeof (_) ) using namespace std; const int MAXN = 1…
目录: 1. 开篇 2. 论数组名array.&array的区别 3. array.&array的区别表现在什么地方 4. 讨论 5. 参考 1.开篇 很多博客和贴吧都有讨论这个话题,各有自己的表述方式,今天在他们的基础上我将继续试着以我自己理解的方式总结一下,欢迎大家的审阅和指评. 2.论数组名array.&array的区别——省政府和市政府的区别 例如: int array[5] = {0}; 总所周知,其中的&array是整个数组array的首地址,array是数组首…
C语言中,数组名作为参数传递给函数时,退化为指针,sizeof对指针操作结果应该是4.例子如下: #include<iostream> using namespace std; void Swap_arr(char* charArr){ int len = sizeof(charArr); cout << "len =" << len << endl; //输出len =4 } int main(){ char charArr[] = &…
1. 正常情况下,数组名是个地址常量. 2. sizeof(数组名)的时候,数组名就代表数字名,其类型为 type array[], 返回数组元素个数. 3. 除了2的情况以外,可以理解为一个指针常量 !? 参考: http://www.cnblogs.com/kalo1111/p/3285955.html http://c.biancheng.net/cpp/html/492.html…
在C/C++中,数组名相当于一个指针,指向数组的首地址.这里“相当于”不代表等于,数组名和指针还是有很多区别的,这个在<C陷阱与缺陷>里有详尽的讲述.而这里要说的是对于数组名取地址的这么一个操作. 如果声明有如下数组: int arr[5]; 那么,&arr这个操作得到了什么值呢? 如果简单的认为arr就是一个指向数组首地址的指针的话,那么很自然会想到&arr得到的是一个指向存放arr这个指针的指针,也就是一个二级指针,然而事实却并不是这样. 观察以下代码: int arr[5…
一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址.指针变量既然可以指向变量,当然也可以指向数组和数组元素(把数据起始地址或某一元素的地址放到一个指针变量中).所谓数组的指针是指数组的起始地址,数组元素的指针数组元素的地址. 这种指针变量的定义与以前介绍的指向变量的指针变量相同.应当注意,如果数组为int型,则指针变量亦应指向int型. C语言规定数组名代表数组的首地址,也就是第一个元素的地址.因此,下面两个语句等价: p=&a[0]: p=a: 注意数…
引自: http://blog.csdn.net/tianyue168/article/details/5781924 #i nclude <iostream.h> int  main( int  argc,  char * argv[]) { char  str[10]; char  *pStr = str; cout <<  sizeof (str) << endl; cout <<  sizeof (pStr) << endl; retur…
    在C中, 在几乎所有使用数组的表达式中,数组名的值是个指针常量,也就是数组第一个元素的地址. 它的类型取决于数组元素的类型: 如果它们是int类型,那么数组名的类型就是“指向int的常量指针“.       在以下两种场合下,数组名并不是用指针常量来表示,  就是当数组名作为sizeof操作符和 单目操作符&的操作数时.        sizeof返回整个数组的长度,而不是指向数组的指针的长度. 取一个数组名的地址所产生的是一个指向数组的指针,而不是一个指向某个指针常量的指针.所以&…
原文:http://www.cnblogs.com/ddx-deng/archive/2012/12/16/3755862.html 第一个结论: #include "iostream.h"void main(){1. char str[]="abcdef";2.int n[]={1,2,3,4,5};3.char *p=str;//4. cout<<sizeof(str)<<endl;一个字母在内存中占一个字节,这里输出7,7个字节但是6个…
转载自: C/C++数组名与指针区别深入探索 引言 指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.于是乎,很多程序设计者就被搞糊涂了.而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是指针".很幸运,我的大学老师就是其中之一.时至今日,我日复一日地进行着C/C++项目的开发,而身边还一直充满这样的程序员,他们保留着"数组名就是指针"的误解. 想必这种误解的根源在于国内某著名的C程序设计教程.如果…
在做这道题时: 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这里作为指针使用 { c…
sizeof数组名和字符指针是有区别的. #include <stdio.h> #include <stdlib.h> void change(char url[]); int main(int argc,char* argv[]) { char* src="/its.php22222"; printf("length:%d\n",sizeof(src)); ]="zhanghanqing"; printf("l…
版权声明:原创文章,转载请注明出处. 1. 一维数组名与指针 对于一维数组来说,数组名就是指向该数组首地址的指针,对于: ]; array就是该数组的首地址,如果我们想定义一个指向该数组的指针,我们可以用如下定义: int *p; 然后令: p = array; 那么指针p就指向了数组array的首地址,此时我们可以向操作array一样操作p: #include <stdio.h> int main(){ ]= {,,,,,,,,,}; int *p = array; ;i<;i++){…