scanf语句中指针怎样指向数组
你是想输入文字吧?指针地址都是由操作系统分配的,不可以自己随意制定。 先用malloc函数分配一个足够大的内存空间,然后用scanf函数输入内容,不用这些空间后最好用free函数释放。部分代码 #include /* 使用malloc和free函数需要这个头文件 */ char *a[3]; a[0]=(char *)malloc(100); /* 算上结尾的\0,不超过100个字符 */ scanf("%s", a[0]); free(a[0]); /* 使用解释后释放 */ C语言教材讲指针的部分有讲解。
c语言为什么能把数组的地址赋值给指针
c语言可以将数组的地址赋值给指针,主要是因为数组名本身就是一个指针常量,代表了数组的首地址。
具体解释如下:1. 在C语言中,数组名相当于指向数组首元素的指针。
当我们使用数组名进行赋值操作时,实际上是将数组首元素的地址赋给了指针变量。
这是因为数组在内存中是连续存储的,数组名指向的是数组的首地址。
2. 指针变量可以存储任何地址。
由于数组名本质上就是一个指针常量,因此可以将数组名赋值给其他指针变量,将数组的首地址传递给这些指针变量。
这样可以通过指针变量来操作数组的元素。
3. 通过将数组地址赋值给指针,我们可以通过指针对数组进行遍历、访问和修改操作,实现对数组的灵活处理。
综上所述,c语言可以将数组的地址赋值给指针是因为数组名本身就是指针常量,代表了数组的首地址,这样可以通过指针来操作和处理数组。
指向整型数组的指针如何用
数组指针(也称行指针)
定义 int (*p)[10];
()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是10,也可以说是p的步长。也就是说执行p+1时,p要跨过10个整型数据的长度。
例:
int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
所以数组指针也称指向一维数组的指针,亦称行指针。
指针数组
定义 int *p[n];
[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。
如要将二维数组赋给一指针数组:
int *p[3];
int a[3][4];
p++; //该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针
for(i=0;i<3;i++)
p[i]=a[i]
这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2]
所以要分别赋值。
这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。
C语言30天核心突破