数组名并不是表示整个数组

int a[10];

int *pt;

数组名a  的值 是数组内第一个元素的地址 ,a可以理解为一个指针常量,但在一些特殊的情况下,又有别于指针常量

如sizeof(a) ,得到的是数组的长度,&a 产生一个指向数组的指针,而不是指向指针常量的指针--C和指针

pt = &a[0];与pt = a;等价

时间: 2024-10-28 11:15:27

数组名并不是表示整个数组的相关文章

【C语言】数组名传递给函数,数组的sizeof变为4的原因

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[] = &

数组名的地址,和数组名取地址的讨论

这个问题的发现是在以下的代码中发现的: #include<stdio.h> int main() {     int arr[2]={1,2};     printf("%p",arr);     printf("%p",&arr);     return 0; } 在运行之后我们发现的数组名本身的地址和数组名内部存储的地址是完全一样的,我们把数组名理解为一个const的指针(数组名只能作为右值,而不是左值),而&arr到底是什么? 我尝

数组名和数组名取地址、指针数组和数组指针的区别

一,首先我们先分析下数组名和数组名取地址的区别. 我们都知道数组名是数组的首地址,然而对数组名取地址又是什么那?看下面一段程序你就会懂的. #include "stdafx.h"     #include<stdio.h>    using namespace std;    void main()    {          int a[5];          printf("%d\n", a);          printf("%d\n

数组名a、数组名取地址&amp;a、数组首地址&amp;a[0]、数组指针*p

本文链接:https://blog.csdn.net/loongkingwhat/article/details/78910921 数组和指针向来就是傻傻分不清,当他们一起出现的时候就更加懵逼. 1 解析不同变量之间的区别: 数组名a: 数组名可以作为数组第一个元素的指针.我们由数组和指针的关系知道,a代表这个地址数值,它相当于一个指针,指向第一个元素(&a[0]),即指向数组的首地址.数组中的其他元素可以通过a的位移得到,此时的进阶是以数组中单个的元素类型为单位的,即a+i= & a[i

对数组名取地址

int a[5]={1,2,3,4,5}; int b[100]; 一个数组名代表的是数组中第一个元素的位置,通过数组名我们可以访问数组,先看下面两个问题 问题一:看到一篇文章这么写的..int array[10];int (*ptr)[10];ptr=&array;//这里说明&array是指向数组的指针,但为什么&array是指向数组的指针?答一:对数组名取地址在C标准里面是未定义的行为.由于数组名是右值,而&操作符要求操作数具有具体的内存空间,换言之就是一个变量,因此

数组名和指针的深入理解(C++)

指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.于是乎,很多程序设计者就被搞糊涂了. 魔幻数组名 请看程序(本文程序在WIN32平台下编译): #include <iostream> using namespace std; int main() { char str[10]; char* pStr = str; cout << "sizeof(str): \t" << sizeof(str) <&

数组名做函数参数

数组名做函数参数 用数组名做函数参数与用数组元素作实参有几点不同: (1)用数组元素作实参时,只要数组类型和函数的形参变量的类型一致,那么作为下标变量的数组元素的类型也和函数形参变量的类型是一致的.因此,并不要求函数的形参也是下标变量.换句话说,对数组元素的处理是按普通变量对待的.用数组名作函数参数时,则要求形参和相应的实参都必须是类型相同的数组,都必须有明确的数组说明.当形参和实参两者类型不一致时,机会发生错误. (2)用普通变量或下标变量作函数参数时,形参变量和实参变量都是由编译系统分配的两

数组名取地址以及数组名作为sizeof操作符的操作数

数组名取地址十分好玩,在这里记录一下,如果大家有不同见解,欢迎留言探讨: 在大多数情况下,数组名都会默认转换为指向数组的第一个元素的指针.这一点相信大家都知道.比如下边的例子:   int array[3] = {1,2,3};      cout << *array << endl;      cout << array[0] << endl; 上边的两个输出的值是相同的,这个时候array作为数组名默认转换为指向数组的第一个元素的指针.对数组名称进行解引

c语言中数组名的本质

c语言中的数组名的本质是什么,数组名是指针吗? 1.数组名是数组元素的首地址#include <stdlib.h>#include <stdio.h>void main() { int a[10] = {1, 2, 3, 4, 5, 6, 7, 8,9, 10}; printf("a:%d &a:%d :%d \n", a, &a); system("pause"); }上面的程序中,a &a大小一样,证明a就是数组元