怎么让指针指向数组第一个元素
c语言数组和指针谁先有?
c语言数组和指针谁先有?
先有c语言数组,当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。
ptr被置为数组str的第一个元素的地址,因为数组名就是该数组的首地址,也是数组第一个元素的地址。此时可以认为指针ptr就是数组str(反之不成立),这样原来对数组的处理都可以用指针来实现。
scanf语句中指针怎样指向数组?
你是想输入文字吧?指针地址都是由操作系统分配的,不可以自己随意制定。
先用malloc函数分配一个足够大的内存空间,然后用scanf函数输入内容,不用这些空间后最好用free函数释放。部分代码
#include /* 使用malloc和free函数需要这个头文件 */
char *a[3];
a[0](char *)malloc(100); /* 算上结尾的
指向整型数组的指针如何用?
数组指针(也称行指针)
定义 int (*p)[10]
()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是10,也可以说是p的步长。也就是说执行p 1时,p要跨过10个整型数据的长度。
例:
int (*p)[4] //该语句是定义一个数组指针,指向含4个元素的一维数组。
所以数组指针也称指向一维数组的指针,亦称行指针。
指针数组
定义 int *p[n]
[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p 1时,则p指向下一个数组元素,这样赋值是错误的:pa;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *pa 这里*p表示指针数组第一个元素的值,a的首地址的值。
如要将二维数组赋给一指针数组:
int *p[3]
int a[3][4]
p //该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针
for(i0ilt3i )
p[i]a[i]
这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2]
所以要分别赋值。
这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。
C语言30天核心突破