c语言指针数组问题

   更新日期:2024.06.02
a和p都是地址,但是a是常量,它的值不能改变(并不是说它所指向的内容不变),这是数组指针和普通指针的唯一区别
*p=a和p=a是不同的,*p=a是把a中存储的数组的首地址赋值给了p所指向的内存区域,所以,p指向的就是数组a的首地址(如果你在进行这一步之前没有给p分配它要指向的存储空间的话,那么运行时就会报错)
p=a是把a的值赋值给了p,这时p和a都指向了数组的第一个元素,二者就没有太大的区别了。
注意指针的本质,他是一个变量,一般来说是32位的(不知道64位机上的指针是不是64位的),他和int是一样的,指针这4个字节的空间里存储的就是一块内存区域的首地址,

应该说两个a的含义是一样的,都代表了数组。只不过是等号前的p和*p的区别,p=a是为定义好的指针p初始化,他就表示指向数组的首地址,而*p则是运用指针,来指向数组a,自然就是指向了数组里的首元素。
希望你能懂。

*p=a 这样赋值应该会提示出错,a代表的是数组的首地址,而*p指的是数组内的元素,它们类型不匹配
只有在变量申明的时候可以这样,如int *p=a;但这也不是表示把a的元素赋值给p,它还是表示把a的首地址赋值给指针变量p

p=a是将数组a的首地址赋给指针变量p;
*p=a,若a是数组,这种写法是错误的,若a不是数组,是一个普通变量,便是将变量a的值赋给指针p所指内存单元。

  • 18940929931 :c语言指针数组排序?
    衡屈府3703 :答:2014-11-04 C语言指针数组实现多个字符串排序问题。提前说一声谢谢 2012-06-19 C语言指针排序问题 2012-12-17 c语言,编写程序,用指针实现读入一个已经排序的数组和一个整数... 3 2013-01-19 C语言[指针作为函数参数,指针访问数组元素]编写函数可以对任... 2 更多...
  • 18940929931 :C语言指针数组问题
    衡屈府3703 :答:。),那么a[3][3]中,a代表的其实就是他第一行的首地址,那么a+2就是代表第三行(最后那行)的首地址,p=a+2,就是令p指向了a[3][3]的最后一行,这符合p的性质(指向数组的指针),因此是对的。。2. int *p , p = *( a + 2 )p定义成了一个指针,指向一个int型变量的指针...
  • 18940929931 :C语言指针问题(初学者)
    衡屈府3703 :答:c=&ptr; 将ptr地址存入c,c与&a或&b明显不同 2. *问题:*在指针部分有两种用法,一是定义指针变量,比如 char *p;二是表示取指针变量所指的内容,比如char ch,*p; *p=ch;&问题:&指取变量地址,比如 p=&ch;将指针指向ch,即p的值=ch变量的地址 3.指针与数组问题:数组的名字本身...
  • 18940929931 :C语言选择题,关于指针数组。求详解
    衡屈府3703 :答:int a[2][3]; 定义了一个二维函数,每一维数组有三个元素。int (*pt)[3]; 定义了一个数组指针,也就是定义了一个指向有三个元素的指针,即该指针,每次自加1,地址跳过三个int pt=a; 就是让pt指向a[0],注意a[0]是一个数组地址,里面有三个元素 对于A选项,pt[0][0]是正确的,...
  • 18940929931 :c语言数组与指针的问题
    衡屈府3703 :答:问题2:先说一下&a代表的意思。假设数组为int a[4]对于一维数组&a代表的是int型数组指针,它与a的区别是a是int型指针,但是&a代表是int型数组指针,&a的步长为以为数组大小乘以int型数据所占字节数,所以当p = a时,这两个类型不匹配,因为p为int型数组指针,a为简单int型指针,对于表达式p =...
  • 18940929931 :c语言指针指向数组的问题。
    衡屈府3703 :答:首先你要明白一点,数组名和指针本质上是一回事,都是地址,该数组的首地址。知道这一点后就可以活学活用了。这是c语言的精髓。比如你定义了int p,a[10];并且让p=a;,这个操作叫做指针p指向了数组a,其本质是给p这个变量付了一个值,就是数组a的地址,也是a[0]的地址,也是a本身里面存储的...
  • 18940929931 :c语言指针与数组问题!
    衡屈府3703 :答:这个问题关键在于理解指针为什么要有类型。其实不同类型的指针本质上都是一样的,即内存地址,地址本身是没有类型的,赋予指针类型的意义在于给出存储数据的字节宽度,也称数据对齐宽度。比如 int *pt,pt是一个整数指针,那么编译器便知道如果通过pt读取数据时需要一次读取4字节,因为那里存放着一个int。...
  • 18940929931 :c语言指针和数组问题
    衡屈府3703 :答:char **p; 定义指针的指针 char p[20][20]; 定义二维数组,p为数组首地址 char *p[100]; 定义指针数组,数组的元素是指针变量,指针变量为char *,元素个数为100 char (*p)[100]; 定义指向长度为100的 一维数组的指针
  • 18940929931 :C语言的数组和指针问题,谢谢高手的解答!
    衡屈府3703 :答:所以B是一个2级常指针,同样指向二维数组的第一个元素B[0],而B[0]是一个一维数组。总结,问题的关键在于,数组名相当于一个指向于这个数组第一个元素的指针。3)所以,int A[2][3][4]={0};A是一个三维数组,其中A[0]和A[1]都是它的元素,A[0]是第一个元素。所以, A是一个三级...
  • 18940929931 :c语言数组指针问题 这里面第二个for循环里 比大小到底是怎么理解的...
    衡屈府3703 :答:输出当前元素的值。比大小的逻辑是:在第二个for循环中,循环条件是p<=*q+i,即p所指向的地址小于等于当前行的第i个元素的地址。因为在这个循环中,我们只需要输出当前行的前i个元素,所以循环条件要限制在这个范围内。注意,这里的p和q都是指针变量,所以它们指向的是地址,而不是数组元素的值。
  • 相关链接

    欢迎反馈与建议,请联系电邮
    2024 © 视觉网