当前位置:首页 » 编程语言 » c语言数组名地址自加
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言数组名地址自加

发布时间: 2023-01-05 09:49:21

‘壹’ c语言数组中引用时可以用自增符号吗

数组不可以++
指针变量可以实现本身的值的改变。如char *p="abc"; p++是合法的;
而数组char arr[] = "abc"; arr++是错误的。因为arr是数组名,
它是数组的首地址,是常量,而指针时变量。 但是可以a[0]++;
自增运算符的操作对象要求是可修改的左值,但是数组名不是可修改的左值

‘贰’ c语言 数组中自加是什么意思比如:a[i++]=a;谢谢大家

a[i] = a;
i ++;
先把a赋值给数组a下标为 i 的 元素
把 i 自加 1 ;即指向下一个元素

++i
i++
前者是先自加再调用
后者是先调用再自加

‘叁’ C语言 数组名 地址

数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在c语言的教学过程中也错误得给学生讲解:"数组名就是指针"。这种误解的根源在于国内某着名的c程序设计教程(出版量最多的那本破书)。
数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量;指向数组的指针则是另外一种变量类型,仅仅意味着数组的存放地址!
sizeof(a)为什么等于40呢,因为数组这种结构保存了数组的大小,有的书说这个值保存在数组首地址前面的内存中(这一点,我没验证)。最简单的方法你就记着,数组名不是普通的指针。

‘肆’ 请问一下,c语言中数组自增是什么意思啊 例如a[i]++

int
a[12]={0},
数组a包含12个元素,全为0
*p[3],
指针数组
**p,i;
指向指针的指针和变量i
for(i=0;i<3;i)应该为for(i=0;i<3;++i)
循环
p[i]=&a[i*4];
意思是p[i]的值为a[i*4]的地址,这里p[i]是指针
也就是
p[0]指向a[0]地址
p[1]指向a[4]地址
p[2]指向a[8]地址
pp=p;pp指向指针数组p的地址
pp是指向指针的指针,p是指针数组,所以p也是指向指针的指针,可以pp=p

‘伍’ C语言 数组 字符数组 自加问题

上面说的挺好的, 不过可能好像还有个问题没有说, 我再补充下吧..

int a[10];
a是一个数组的首地址, 他是一个常量指针, 其值是不能改变的, 如果你想通过移动指针来取数组的下一个元素, 可以这样来做:

int* ptr = a;//声明一个int类型的指针指向数组的首地址;

*(++ptr)取到的是a[1], 注意, 如果写成*ptr++, 虽然++的优先级高于*,但是p++具有滞后性, 也就是ptr先进行完操作(*ptr操作), 在使其值加1, 也就是说*ptr++取到的还是a[0]的值...

"字符数组自加和数组自加效果一样吗?"这句没怎么看懂,字符数组也是数组啊, 当然效果一样...当然这里你说的数组自加也许说的是让数组名++, 上面说了, 数组名是不能进行++操作的...

关于第二个问题
字符数组gets(ch[i])这个很难说对错, 要看具体情况, 如果ch[i]的值是一个指向一段内存的首地址, 这样是可以的(当然输入的字符数要小于这段内存的总长度 - 1), 比如:

#define MAX_LEN 20
char* ch[5];

for(int i=0; i<5; i++)
{
ch[i] = (char*)malloc(MAX_LEN * sizeof(char));
gets(ch[i]);
}

但如果ch[i]只是一个字符, 比如:

char ch[10];
gets(ch[1]);

这样估计编译也过不了...

‘陆’ C语言数组的地址

其实你这个疑问是概念上的混淆,或者说对指针了解上上的欠缺

首先讲int a[3] = {2,3,4};
这里的a是这个数组的首地址,比如定义如:int *p = a;这时如果你进行如下操作:
p++;
printf("%d\n",*p);
结果会是输出2,也就是说p+1相当于数组索引加1,但是像你所问的为什么&a和a是相同的 ,首先要知道他们分别代表什么意思,a:像上面所说的是数组的首地址,做自加运算会根据数组类型来计算偏移量,那么&a是什么东西呢,实际上它也是一个指针,是指向一个具有3个元素的数组的指针,如何理解,看以下定义:

如果你定义int *q = &a;这时编译器肯定报错,绘制出数据类型不一致,那么你这样样定义就没有问题:int (*q)[3] = &a;这时如果你再对q进行++操作,那么加的就不同了,如相面的p++操作后p的值会加4,而这里q++操作后的值会加12,也就是跳过3个数组元素,然而,确实这两个指针的初始值是一样的,只是类型不一样而已,这对二维数组的访问时很方便的,这个你可以参照2维数组得到进一步理解,讲的有点乱,不知道你能不能理解

‘柒’ C语言的数组名可以加取地址符吗例如int a[2],然后输出&a,好像在哪里看见过,但是觉得意义

可以加取地址符,但是a就表示&a[0],没必要。

‘捌’ C语言,地址,指针,自加问题

其实*P++你要这么看,首先判断*的优先级大于++;其次p++的意思是先使用当前的p值然后再做
p=p+1;两个因素联系起来这句话就这么理解:先取p指针的内容;然后p指针再做后移指向数组的下一位元素,所以这句话相当于:*p;p=p+1;
第二个问题其实也大同小异,我同样可以用同样的方法把*p++=*(p-2)+*(p-1);分为下面几句话

首先:*p=*(p-2)+*(p-1);p++;

也就是先把前两项的值赋给当前数组元素;然后p++;指针后移,循环赋值直至所有的数组元素被赋值这就是你看到该语句在for循环里的原因。

希望我的回答对你有帮助!

‘玖’ c语言编程输入时为什么一维数组要加地址符,字符数组就不用呢

因为字符数组,数组名本身就是指一个地址。

定义了字符型数组char name[10]。name有两个含义:一个是代表着name这个数组第一个位置的地址,也就是name[0]的地址。可以说name就等价于&name[0]。

还有一种意思就是指代name整个数组。&name 就是整个数组的首地址。所以name和&name取得的地址是相同的。

(9)c语言数组名地址自加扩展阅读

name和&name区别:

不同点在于:name+1表示的是数组第二个元素的地址,而&name+1表示的是整个数组后又一个name数组的首地址,即&name[10]后一个新的name数组的首地址。例如:

#include<stdio.h>

int main(void)

{

char name[10]={"hello csdn"};

printf("name+1的地址:%p ",name+1);

printf("&name+1的地址:%p ",&name+1);

return 0;

}

所以说scanf("%s",name);和scanf("%s",&name);执行后的结果是一样的,都是name的首地址,都是给字符数组name赋值。推荐用 scanf("%s",name); ,第二种不容易理解也容易犯错,有些编译软件也不支持会报错。