一个关于数组首地址的问题

问题描述

一个关于数组首地址的问题 1C
#define _CRT_SECURE_NO_WARNINGS
#include ""stdlib.h""
#include ""stdio.h""
#include ""string.h""
int main()
{
int buf1[100] = { 0 };
int buf2[100] = { 0 };
int *p1 = buf1;
int *p2 = buf2;
printf(""sizeof %d%d
"" &buf1 buf1);/
printf(""sizeof %d%d
"" (&buf1)+1 buf1+1);
system(""pause"");
}

为什么第二次printf(&buf1)+1出来的地址会和第一次printf出来的结果一样

解决方案

取数组首地址的问题:
指针与数组首地址的一个区别
C++数组首地址

解决方案二:
不一样啊,08161216

解决方案三:
你自己的截图,结果也不一样啊,
前面2个打印的是数组的首地址
第三个是首地址+400 即 100 *4 ,100是因为数组有100项,4是因为int类型4个字节(在此环境)
第四个是首地址加4, 4是指针占4个字节

时间: 2024-08-03 14:29:00

一个关于数组首地址的问题的相关文章

数组首地址取地址

一.问题来由 普通指针可被修改导致地址偏移: #include <iostream> using namespace std; int main(int argc,char *argv[]) { int a = 6; int *p = &a; //p存放一个地址,pp存放p的地址,上面的代码可以让p存放的地址偏移 cout<<&a<<endl; int *pp = (int *)&p; cout<<p<<endl; (*p

图片-C语言 a[0] 数组首地址只能给指针赋值吗 (a代表某数组)

问题描述 C语言 a[0] 数组首地址只能给指针赋值吗 (a代表某数组) 如果不是的话,为什么下面的代码会出错: 解决方案 因为类型不同,min是int类型,而&a[0]是int * 类型 解决方案二: 把 int mix=&a[0]; int max=&a[0]; 改成 把 int *mix=&a[0]; int *max=&a[0]; 就好了.另外,单词拼错了,最小值是min不是mix. 解决方案三: a[0]是值,&a[0]是数组首地址,加&报

一个关于数组溢出的问题,请大神帮小弟解惑

问题描述 一个关于数组溢出的问题,请大神帮小弟解惑 vc6.0环境,代码很简单,但是不管你输入的数组n是多大,a[n]的值都是n,按理说不是最大就到n-1了吗,为什么不报错? #include using namespace std; int main() {int i;int a[11]; int*p=a; for(i=0;i<=10;i++) a[i]=i; cout<<a[11]; return 0; } 解决方案 你试试int *a = new int[11];数组实际上放在栈内

c语言,数组,数组名表示首地址

问题描述 c语言,数组,数组名表示首地址 c语言中为什么数组名a和&a的输出结果是一样的,a不是本来就是地址吗 解决方案 应该是a和&a都被编译器解释成数组的首地址了. 解决方案二: 你说的没错,a是表示数组首元素的地址,但是 你要知道它是一个指针常量,即 一个不能被更改的值.对于printf(""%dn""a);和printf(""%dn""&a);,输出的格式是 %d所以有没有&编译器都不做

指针-C++中利用子函数交换main()中的一个int数组的值,交换地址为什么不可?

问题描述 C++中利用子函数交换main()中的一个int数组的值,交换地址为什么不可? 某书思考题 只改动子函数 实现主函数中数组排序我写了3种子函数 注释的都是可以正常用的 最上面的不可以(排序没变)不知道是为啥(指针不是代表地址吗 既然形参无法传回那我改变地址应该也可以啊) #include<iostream>#include<iomanip>#include<cstdlib> //pauseusing namespace std;//排序不变void swap(

c-定义一个指针数组,这个数组名也是字符常量么,但为什么可以被另外一个数组名赋值?

问题描述 定义一个指针数组,这个数组名也是字符常量么,但为什么可以被另外一个数组名赋值? 例如: int x[4][3] ={0}; int (* p)[3] ; //这里p是一个以指针为元素的数组的数组名吧... p = x ; //为什么可以执行这步操作 解决方案 如果是指针,就可以被赋值.int (*p)[3] 是定义一个指向数组的指针,所以能被改变初始值 . P 说白了,其实就是三个指针.而不是数组. 就像 int i[3] 中的 i[0],i[1],i[2]不一样,是可以被修改的. 如

产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复

写在前面 前天去面试了,给出的笔试中有这样的一道算法题,产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复 当时,脑子一热,也没想那么多,就用集合实现了一下,经面试官提醒,发现还有更好的方式来实现. 代码 首先看一下这样一段代码 1 namespace Wolfy.RandomDemo 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 List<int> lst = new List<i

c++,一个全局变量数组,在程序运行阶段,都要用到,什么时候进行delete[]?

问题描述 c++,一个全局变量数组,在程序运行阶段,都要用到,什么时候进行delete[]? 在我的c++代码中,有3个全局变量的数组,假设分别为a[],b[],c[] 它们保存的是三维图像,所以size都不小,size=512*512*512; 我在头文件中声明,在.cpp文件初始化中有语句: a=new int[size]; b=new int[size]; c=new int[size]; 然后我的这个程序就是为了观察这三幅图像,也就是说程序运行后,用户会随时点击按钮显示这三幅图像中任一一

c++的问题-堆空间内存分配,关于首地址处记录分配内存的大小的问题

问题描述 堆空间内存分配,关于首地址处记录分配内存的大小的问题 堆空间内存分配时,首地址处记录分配内存的大小会不会占用内存空间. 大小记录在首地址处,如果占用了首地址的内存空间,首地址又怎么能用来存储数据了呢. 比如 char *a = new char; 分配的一个字节空间需要用来记录分配内存的大小,再拿来存字节'a',那么存储的大小信息不就丢失了吗? 求解答,万分感谢! 解决方案 a是在栈上,只不过他申请的空间是在堆上,记录分配内存的大小和地址是在页的首地址,不会用来存放a所对应的数据,a申