c语言中只能给指针赋什么值 c语言里面为什么不能把指标赋给阵列名?
c语言里面为什么不能把指标赋给阵列名?
c语言里面为什么不能把指标赋给阵列名?
有两种情况。。
1、char *p = "123"; char s[4];
s = p;
这种情况是不合法的。。此时的阵列名虽然也是指标,但应该看成指标常量,是不能修改的。。
2、void fun(char a[]){}
void main()
{
char *p = "123";
fun(p);
}
阵列作为函式引数的时候,是可以把指标变数赋值给它的,这时阵列名就可以看作一般的指标变量了。。
简单的说就是这样。。

。此时的阵列名虽然也是指标,但应该看成指标常量,是不能修改的。。 2、void fun(char a[]){} void main(){char *p = "123";fun(p);}阵列作为函式引数的时候,是可以把指标变数赋值给它的,这时阵列名就可以看作一般的指标变量了。。 简单的说就是这样。。
为什么不能把二维阵列名/行的首地址赋给指标?
要想直接把一个二维阵列名赋给一个指标,这个指标必须是行指标或二级指标才可以;
因为在C程式设计系统中,对于二维阵列会看成阵列元素为一维阵列的一维阵列,即对于二维阵列aa[2][3],系统会看成aa[0]和aa[1],而aa[0]和aa[1]中分别包含三个元素,这就是系统对于二维阵列的处理;
所以直接把二维阵列名赋给一个普通的指标变数,这个指标是指向元素aa[0]的,但实际上呢,aa[0]不是一个具体的元素,而是元素aa[0][0]的地址;
所以只有把阵列名赋给二级指标它才指向一个具体的元素。
二维阵列名不能说是二级指标,不能按指标的思路来理解二维阵列,要按一维阵列的思路来理解,即按照系统的理解方式会简单些。
*(a+0)==>a[0]是第一个一维阵列的阵列名和首地址
*a==>*(a+0)==>a[0]是第一个一维阵列的阵列名和首地址
int a[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}}
设阵列a的首地址为1000。
从二维阵列的角度来看,a是二维阵列名,a代表整个二维阵列的首地址,也是二维阵列0行的首地址a+1代表第一行的首地址。
a[0]是第一个一维阵列的阵列名和首地址,因此也为1000。*(a+0)或*a是与a[0]等效的, 它表示一维阵列a[0]0 号元素的首地址,也为1000。&a[0][0]是二维阵列a的0行0列元素首地址,同样是1000。因此,a,a[0],*(a+0),*a,&a[0][0]是相等的。
同理,a+1是二维阵列1行的首地址,等于1008。a[1]是第二个一维阵列的阵列名和首地址,因此也为1008。&a[1][0]是二维阵列a的1行0列元素地址,也是1008。因此a+1,a[1],*(a+1),&a[1][0]是等同的。
由此可得出:a+i,a[i],*(a+i),&a[i][0]是等同的。
此外,&a[i]和a[i]也是等同的。因为在二维阵列中不能把&a[i]理解为元素a[i]的地址,不存在元素a[i]。C语言规定,它是一种地址计算方法,表示阵列a第i行首地址。由此,我们得出:a[i],&a[i],*(a+i)和a+i也都是等同的。
另外,a[0]也可以看成是a[0]+0,是一维阵列a[0]的0号元素的首地址,而a[0]+1则是a[0]的1号元素首地址,由此可得出a[i]+j则是一维阵列a[i]的j号元素首地址,它等于&a[i][j]。
由a[i]=*(a+i)得a[i]+j=*(a+i)+j。由于*(a+i)+j是二维阵列a的i行j列元素的首地址,所以,该元素的值等于*(*(a+i)+j)。
C语言里面阵列与指标的问题,为什么 阵列名 与 &阵列名输出是一个值,如图所示
声明里定义了 int a[]; 所以 a[] 是一维阵列
语句里, a 是 一维阵列 的名字,所以它代表 a 阵列 的首地址。
(如果 宣告 是 int a; 是简单 变数,则 语句里 a 表示 变数 a 的 值)
语句里,&a 是 求 a 的地址。 对于阵列a,它等于 &a[0] 或 (a+0), 也就等于 a
(如果 宣告 是 int a; 是简单 变数,则 语句里 &a 表示 求变数 a 的 地址)
C语言中二维阵列名能否直接赋给指标变数
可以,但所宣告的指标型别是指向指标的指标如:
int a[3][3];
int** array_ptr=a;
关于c语言 把阵列名赋予指标的问题。
你的理解从本质上就有问题
int *p1=a不能通过编译,因为a是二维阵列指标,型别是int (*)[3],无法转换到int*型。必须用int (*p1)[3]=a或者int *p1=a[0]才可以。同理int p2=a[0]无法通过编译,因为a[0]是一个int指标而不是一个int元素,必须用int *p2=a[0]才可以。
a代表二维阵列,它指向的是一维阵列a[0]的地址,该地址恰好和a[0][0]的地址相等,但型别上有着本质区别,a是一个是int*阵列的指标而a[0]是一个int*元素的指标。a[0]代表的是二维阵列a的第一行,是一个一维阵列,指标a[0]是int*型,它指向该一维阵列的首元,即a[0][0]的地址。
C语言-这里的str是什么?指标还是阵列名?为什么不需要&?
阵列名,代表的是阵列的第一个元素的地址,和你用char*p指向一个字串然后:
scanf("%s",p);原理上是一样的
为什么不能把一个char阵列名赋值给另一个char阵列名?
阵列名不能简单的理解成是指标,而只能说在多数需要指标的位置上阵列名退化成了指标。
阵列名与指标是不同的,阵列名仅仅是一个名称,不能像指标变数那样可以任意操纵,可以粗略的理解为阵列名是一个固定不变的常量。
C语言中(不是C++)怎样将字串阵列赋给阵列指标??
#include <windows.h>
#include "stdio.h"
#include<string.h>
int main()
{
char str_A[5][30]={"woaibei","jingtian","anmen","taiyang","sheng"};
char *p[30];
int i;
for(i=0;i<5;i++)
{
p[i] = str_A[i];
}
for(i=0;i<5;i++)
{
printf("%sn",p[i] );
}
MessageBox(NULL,"再见,God Bye!","Thanks",MB_OK);
return 1 * 2 * 3 * 234234234 ;
}
c语言将阵列名隐式转换为指标
阵列名就是阵列元素的首地址,如int a[3],a和&a[0]是一样的。要想操作里面的元素,可以直接用,如a[2],也可以定义一个指标,让它指向a,然后用指标来操作!