c语言数组输入什么输出什么
c语言数组输入方式?
c语言数组输入方式?
在C语言中,有两个函数可以让用户从键盘上输入数组数据,它们分别是gets()和scanf()。scanf()是通过格式控制符%s输入数组字符串,除了字符串,还能输入其他类型的数据;gets()是直接输入数组字符串,并且只能输入字符串。
但是,scanf()和gets()是有区别的。
scanf()读取字符串时以空格为分隔,遇到空格就认为当前字符串结束了,所以无法读取含有空格的字符串。
gets()认为空格也是字符串的一部分,只有遇到回车键时才认为字符串输入结束,所以,不管输入了多少个空格,只要不按下回车键,对 gets() 来说就是一个完整的字符串。换句话说,gets() 用来读取一整行字符串。
c语言指针数组的用法?
一维数组指针
一维数组的指针是直接将一维数组的首地址赋予指针变量,之后通过指针变量的运算逐渐输出一维数组中的各个元素的值。
例如:int a[20]
int *p
因为数组名相当于一个指针指向的就是一维数组的首地址(例如a[0]),所以可以直接将数组名赋予指针变量(例如pa),无需加取地址符amp;也可以让指针变量指向第一个元素的地址(例如pampa[0])即pa与pampa[0]是等价的,(应当要注意的是:pa是将数组首元素的地址赋给指针变量,而非将数组a的各元素的值赋给指针变量)
如果一个指针变量p已经指向数组中的一个元素,则p 1指向数组中的下一个元素,p-1指向的是数组中的上一个元素。(注意:执行P 1或P-1时,并不是将P的值简单的加1,而是加上一个数组元素所占用的字节数,例如:float型,每个元素占4个字节,所以p 1意味着使p的地址加4个字节,以便让其指向下一个元素)
这里的a i与p i是等价的,也可以用数组名进行运算;
e
*(a i)*(p i)
二维数组指针
令int a[2][3]{{1,2,3},{4,5,6}}
在二维数组中数组名指向数组的首元素,但是不是简单的表示一个简单的元素,而是由多个元素所组成的一维数组,因此数组名指的是二维数组首行(即下标为0的那一行)的首地址,a 1即表示下标为1的那一行元素,又因为数组名代表首元素的地址,所以a即代表二维数组中a[0][0]的值,a 1即a[1][0]的值。a[0]等价于*(a 0),a[1]等价于*(a 1),(a 1) 1的值即ampa[1][1]。要想得到a[1][1]的值,就要再进行取值,即(a[1] 1)或*((a 1) 1)为a[1][1]的值。(注意:(a i)与a[i]是等价的)
切记二维数组名是指向二维数组首行,而非指向二维数组a[0][0];
二维数组在指向行的指针前加*,就转化为了指向列的指针,反之,在二维数组指向列的指针前加amp,就转化为了指向行的指针.(例如:ampa[i]或a i指向行.而a[i]或*(a i)则指向列)
在定义时的int (*p)[4]的意思是指针变量p指向包含四个整型元素的一维数组,即在二维数组中一共有四行元素