
正文
c语言中地址加一什么意思,c语言中地址值是什么
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
C语言中地址+1实际上加了多少
因int型数据占用2个字节内存单元,指针变量pa增1,指针pa中的地址+2; 而double型变量占用8个字节内存单元,指针变量pb增1,则pb中的地址值+8; 同理char型变量占用一个字节内存单元,指针变量pc增1,pc中的地址值+1。
a+1,那个1是按a的类型来算多少字节的,比如int,那个1其实是4个字节,如果double那么就是sizeof(double)个字节。依次类推。a本身只有一个int的大小就是4,你分配再多它也无福消受。int *a = new a[10];也可以实现你最后的要求,你最后的提问是正确的。
自增就是+1的意思,地址+1就是指向下一个元素。
主要是看你定义指针的类型,比如你定义int *p=NULL; 那么int占4个字节。指向int的指针+1,该指针所指的内存地址要+4;如果你是定义 char *p=NULL; 那么char占1个字节。
c语言地址是一个点,或叫“偏移量”(offset) 。程序里,每个变量都有不同的偏移量。操作系统把程序装入内存时,临时分配一个区域,内存里面的真地址等于 临时分配的值+“偏移量”。程序运行时,到真地址里去读写数据(取数,存数)。数据在运算器和寄存器里加工。地址相当于门牌号码,便于寻找数据。
相关问答
Q1: C语言中的二维数组里a+1和*(a+1)为什么都是地址
1、比如一个指向二维数组的指针,它就相当于一个一维数组,其中的每一个元素都指向了一个数组。所以*a的值只是一个指向的一维数组的指针,它的值当然是地址了。。
2、所以从类型上讲,a是指向指针的指针,*a是指向一行一维数组的指针。但a作为数组名,又表示了数组首地址(在内存中元素地址是连续的)。a是第一行数组首地址。所以值相同 (注意只是值相同,比如a[n]和(*a)[n]意义就不一样,一个表示第n行的行指针,一个是第一行的第n列)。
3、其指向二维数组的首地址。于是a的值就是首地址的值。而*a,就是a[0],a[0]是第一行的标记,代表第一行的首地址。在二维数组中,所有元素都是紧密排列的,这样整个数组的首地址,第一行的首地址,和第一个元素的首地址,即a, a[0], &a[0][0] 都是相同的。于是a和*a的值是相同的。
4、哈哈!以下标从0开始说。若a是二维数组名,则a作常指针使用时,a是第0行的指针,*a是第0行的第一个元素的指针(二者值同,意义不同),**a是第0行的第0个元素的值。
5、因为在C语言中,代表获取地址的内容,& 代表获取地址,然后根据运算符的优先级,与 & 优先级相同,并且都是从右到左,所以上面的式子可以理解为 (&a[1]),即先获取a[1]的地址,然后再获取其中的内容。所以两个符号一起用,就等价于*(&a[1])== a[1]。
Q2: c语言中a+i是地址吗,书上说a+i是a[i]的指针,既然这样,那么*(a+i)为什...
指针就是地址,地址就是指针;指针变量是一个变量,它保存了基本类型变量的地址。如果指针变量p保存了变量a的地址,那么称作p指向了a,*p 就是变量a。如果p是一个指针变量,*p 表示了以 p 的内容为地址的变量,就是p指向的变量。
*(a+i)与a[i]是一样的地址应该是说他们指向的都是同一个内存单元,也就是说*(a+i)指向的值的地址,与a[i]指向的值的地址都是一样的。也就是说他们得到的值是一样的。这里不是说他们得到的是一个内存变量的地址还是内存变量的值,只是说明他们是一样的,得到的值一样,换句话说就是一样的地址。
a[i]是数组专用的方法,它本身就是指a往后偏移i个长度内存空间里存放的内容,因此用&取地址就变成了该内容对应的地址;也可以用*(a+i),a+i指从地址a偏移i个长度(此长度不是字节,取决于数组存储的元素类型)的地址(注意此时它不是指里面的内容),因此加上*以取到里面的内容。
c语言中&a[i]就是取数组元素a[i]的地址。
a[i]是一个一元数组的第i+1个元素!a是数组的名字,i是数组的下标,也就是指是数组中第I+1个元素的意思,因为数组的小标是从0开始的。
关于c语言中地址加一什么意思和c语言中地址值是什么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。





