c++中若定义数组a[10],那么数组元素a[10]代表什么? 此时a[-1]存在吗?
【答案】
a代表数组名,是一个指针,指向数组中第一个元素(即a[0])的首地址。
a[0],数组a中的第一个元素。
*p=a,应该是int *p=a吧?表示把指针a赋值给指针p,即p也是指向数组中第一个元素(即a[0])的首地址。
有不明白的再问哦~ 望采纳~ o(∩_∩)o~
int a[10]表示定义一个长度为10的整型数组,数组下标从0到9,分别为a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。
a[10]代表a[9]后面的那段内存。a[-1]存在,但是对于正常的程序来说,那毫无意义,它指的是这个数组首地址前面的一段内存。
~~~~~~~~~~
可以用这个技巧~~,不过一定得注意不要越界~
未知的.
有可能是未分配的内存,
也会进入其他变量的代码区域,也可能会进入执行代码区域
如果a[10]开头的一段内存可以被执行,可以直接从a[10]开始硬编码执行程序,
缓冲区溢出就是从这里发生的
不建议使用负数下标,内存的分配严重依赖于编译器,天知道a[-1]的一段内存分配给了那个变量.在某个编译器里好用,另一个编译器不见得好用,而且有的编译器带优化功能,天知道给优化成什么样了.
用C++ 定义长度为10的整型数组,通过键盘输入为数组元素依次赋值,然后...
include<iostream> using namespace std;int main(){ int a[10];for(int i=0;i<10;i++)cin>>a[i];\/\/*依次输入10个数*\/\/ bool flag=true;\/\/*设置提前结束开关*\/\/ int j,k,r;\/\/*j控制外循环,k控制内循环,r作为交换用的暂存区*\/\/ for(j=0;j<9;j++)\/\/*排序*\/\/ { for(...
C语言定义数组问题
你这种抠细节的精神很好,我来告诉你正确答案。如果你是定义char a[10],那么你确保能使用的内存单元就是a[0]~~a[9],但是C编译器不会对数组下标进行检查,因此a[10]不会报错,并被编译为a[9]之后的那个内存单元。你定义a[10]的时候通常由于内存对齐等原因分配的内存会不止10bytes,因此编译器...
int a[10],为什么++a不能表示a[1]的地址
程序中用到a的地方就用数组首地址来替换计算,++a要求++后面必须是个变量名,所以++a是不可以的,要写也必须写++a[0]之类的才对 另外如果int a[10],*p; 指针变量要赋值成a数组的起始地址,就可以:p=&a[0];或者p=a;然后用++p;来使p指向a[1],也就是存放a[1]的地址。
若有说明:int a[10];则对数组元素的正确引用是( ) 选项: a、a[10...
D。a数组中包含有10个元素,并为这10个元素分配内存空间。数组元素的一般形式为:数组名[下标] 。其中的下标只能为整型常量或整型表达式。如为小数时,C编译将自动取整。例如,a[5],a[i+j],a[i++]都是合法的数组元素。数组元素通常也称为下标变量。总之数值在0到9之间,超过此范围则有误。incl...
设有定义:int a[10],*p=a; 为什么p++合法,而a--不合法,请详细说明
这无法“详细”,一句话就解决了:a是数组名,也就是a[0]的地址&a[0],就像声明一个变量i一样其地址&i是不可变更的;而p是自定义的一个指针变量,程序员想让它指向哪个同类型的变量都可以……
int a[10];合法的数组元素的最小下标值为多少
在C\/C++中最小是0,数组的下标都是从0开始的。int a[10]; 说明整型数组a,有10个元素。第10个元素,使用a[9]表示,第一个则是a[0]。[]中的数字称作下标,是用于区分数组的各个元素的数字编号。
定义一个包含十个元素的一维数组,使用C\/C++编写一种算法,输出其中所有...
include "stdio.h"int main(int argc,char *argv[]){int a[10]={3,5,7,1,6,5,2,4,9,10},i;for(i=0;i<10;i++)if((a[i]&1)==0)printf("%3d",a[i]);printf("\\n");return 0;}运行结果:
c+编程序输入整型一维数组 a[10] ,将其中的最大值和最小值进行交换...
int main(){int a[10];int i,s,max=0,j=0;for(i=0;i<10;i++)scanf("%d",&a[i]);s=a[0];for(i=1;i<10;i++){if(s<a[i]){s=a[i];max = i;}else j=i;}s = a[max];a[max]= a[j];a[j]=s;for(i=0;i<10;i++)printf("%4d",a[i]);printf("\\n"...
若有定义:int a[10];。则以下表达式中不能代表数组元素a[1]的地址的...
答案为A ,A的意思为a【0】的地址 ,先用了a【0】再加1的
根据声明int a[10], *p=a;,下列表达式错误的是___。 A.a[9] B.p[5...
p[5]就是*(p+5),也就是a[5]这个题应该是a++错了,数组名a代表的是地址没错,但这个时候a是个常量,++运算符可不能让常量自动加1,只能是变量,所以错了