C语言数组与指针,请讲解为什么。 C语言里面数组与指针的问题,为什么 数组名 与 &数组名输出...

作者&投稿:镡史 (若有异议请与网页底部的电邮联系)
int
(*p)[4];
//
定义一个数组指针,指向含4个元素的一维数组,数组元素是int类型。
int
*p[4];
//
定义一个指针数组,数组中每个元素是一个指针,指针指向哪里就要根据程序来定了。
判断数组指针与指针数组主要通过运算符的优先级来判断。
int
(*p)[4];
//
由于(
)的优先级高,说明p是一个指针,指向一个一维数组的指针
int
*p[4];
//
由于[
]的优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组

你的题目有点问题“若有int
a[10];*p=a;”『10』这后面应该是逗号吧,如果逗号的话:
选择
C
题目可以看成int
a[10]和int*p=a,这样p就是a[0]的地址,p++可以看成p+1,这样p指向下一元素,即a[1]的首地址。

关于C语言数组与指针的疑问,请帮我解释下好吗~

我这边看不到你的问题描述,不知道你要问什么问题。这段文字会很长,如果有人回答,请不要着急采纳
1、数组是一种连续存储、类型一样的类型,就像人排队一样的,大家都是人,是一个人肉串2、指针是地址,地址是指针。地址是啥子呢,地址是内存的编号。假如是32位的系统,最大只能安4G的内存,怎么算出来的呢,2的32次方呗那这4G的内存里每一个字节一个编号3、指针变量不是指针,指针不是指针变量。指针变量是存储指针的变量它是一个变量,存放的是地址只是因为人类太肤浅,说话不严谨,经常把指针变量说成指针,其实这说法是错的,但是你无力反抗,只能接受咯4、数组和指针有啥关系4.1数组名存放的是数组第一个元素的首地址。数组是常量指针,指向不可改变啥意思,为啥是首地址,为啥不直接说第一元素的地址呢,因为第一个元素可能是多字节的类型比如int就是4个字节,数组名存放的是这个int的第一个字节的地址,后面三位存不下,不要了4.2数组可以转换成指针,指针不能转换成数组看下4.1的描述,数组是常量指针,指向不可改变,再写代码试试就知道了,int arr[10];int* p = arr; //完全没问题int* q = (int*)malloc(sizeof(int) * 4);int arr2[4];arr2 = q; //铁定报错4.3数组传入函数时会默认转换为指针你调用一个函数的时候传入数组,后面的长度可以随便写,不写都行,因为会转换成指针指针又不在乎你的长度如果你要长度怎么办,在外面算好了,用形参传入,在函数内计算是错误滴5、函数调用的本质是拷贝调用形参是传值的,也就是把内存拷贝了一份给形参比如aaa(int a, int b),只是给a,b拷贝了一份值而已,并没有把实参给函数传入指针也是传值,int abc(int* p),p的值只是实参的拷贝,但是p的指向和实参是一样的,就相当于使用实参来改变实参的值咯

声明里定义了 int a[]; 所以 a[] 是一维数组

语句里, a 是 一维数组 的名字,所以它代表 a 数组 的首地址。
(如果 声明 是 int a; 是简单 变量,则 语句里 a 表示 变量 a 的 值)

语句里,&a 是 求 a 的地址。 对于数组a,它等于 &a[0] 或 (a+0), 也就等于 a
(如果 声明 是 int a; 是简单 变量,则 语句里 &a 表示 求变量 a 的 地址)

C语言指针与数组问题,不明白。
答:p=s是把str字符串的首地址传给指针p while(*p)p++;是在p地址存放的字符在有效时指针指向下一个地址 例如,s=welcome...中 w的地址为000000 e的地址为000001(假设字符只占一个地址)刚开始p=000000,p++之后p=000001...,当p=最后一个字符地址之后,p地址存放的字符就不是正常值了,此时while(*p)...

指针与数组的区别和联系
答:既然它们之间没有任何关系,那为何很多人把数组和指针混淆呢?甚至很多人认为指 针和数组是一样的。这就与市面上的C 语言的书有关,几乎没有一本书把这个问题讲透彻,讲明白了。指针和数组的对比 指针 保存数据的地址,任何存入指针变量p 的数据都会被当作地址来处理。p 本身的地址由编译器另外存储...

C语言数组和指针,急啊!
答:输出。解释一下!输出的值并不是数组中的1和0!这是因为输出的是数组中1和0的地址值(十六进制)!即&a[0]和%a[9]这个值是系统分配的!(VC6.0)

论述C语言中指针的概念和作用,并举例说明
答:程序为a分配一个2个字节的存储单元,假如2个字节的地址分别为(ABCD1和ABCD2,唯一),那么p里面放的值就是ABCD1,不是3。这时可通过p直接引用a,实际上*p=3。以后不管a存放在内存中的哪个地方,只用通过调用p就可以引用a。这时如果令*p=4,则最后的a值也为4。对于数组,指针是指向数组的首地址...

c语言的指针与数组的问题
答:p是个指针你知道吧.p的内容其实就是一段内存地址,而在p前加*号,就表示读出这段地址所表示的值是什么.而一个一维数组的名字其实也是一个指针.比如有int a[5], 那么当你只用a时,a其实就是一个指针.你可以让上面那个p=a,p就会指向那个数组.但是你问题中是个二维数组a,设想它是由3个一维数组...

C语言关于指针与二位数组的问题
答:[0]+1) 解释,看前面 (&a+1)=(&a[1][2]+1) ,为什么这两个相等?.(*a[0]+1)=(a[0][0]+1) ,解释,看前面1.和3.好理解地址值是怎么得到,计算机的世界我是不知道它怎么得到的,这是我运行的,最后,我个人觉得行列数组的理解,是取指针地址,还是它的元素,待慢慢理解。。

c语言 指针与数组的问题。
答:p=*(p+1)相当于p[i]=p[i+1]前面的*p就相当于取当前地址变量p指向的地址空间内所表示的值 p=任何东西,就相当于改变了这个地址空间所表示的值,至于地址的值是什么不需要考虑 (p+1)括号里面的,就相当于地址位置向下挪一位,具体地址的值也是不需要考虑的,只要能取得p地址的下一个地址...

C语言,指针和数组区别
答:char a[]是字符数组,char *a[]是指向字符串的指针数组。所以给字符串赋值char a[]={'I',' ','a','m',' ','h','a','p','p','y'};是正确的,相当于初始化一个字符串。但是char *a[]=[]={'I',' ','a','m',' ','h','...

C语言中字符串数组与字符指针数组有什么区别?怎么用
答:我认为:char a [11] = "I love you"; // 注意\0 编译器将string放在栈中。 a是一个地址常量,它指向string的第一个字节。char * b = "I miss you";在栈中分配一个指针(一个指针在栈中被分配4个字节),在堆中分配一个string,将指针指向string。补充:一个string,在内存中存放的...

C语言数组与指针的问题
答:运行到第一个printf中断了一下,看到如上图结果。q恰好指向了a数组地址,实际输出的是a