C-二维数组作为函数参数, 字符数组

1. 如果函数的参数是一个一维数组, 那么我们在传递的时候, 可以传递二维数组的某1行——一个一维数组

2. 二维数组可以作为函数的参数: 如果函数的参数是一个二维数组, 那么传入的实参也必须是一个相同类型的二维数组

3. 同一维数组一样, 当二维数组作为函数的参数的时候, 函数也是声明的一个指针指向传入的二维数组, 并通过指针对传入的二维数组进行操作

4. 当二维数组作为函数的参数的时候, 行数可以不写, 但是列数必须要写

5. 所以跟一维数组一样, 当二维数组作为函数参数是, 函数的参数还要有数组的行, 列这两个参数, 标准写法:

void test(int rows, int cols, int arr[][cols]){}

字符数组:

1. 字符数组的默认值问题: 声明一个字符数组, 不给这个字符数组的元素赋值, 那么这个字符数组的元素是有值的, 内存垃圾值

2. 在声明字符数组的同时, 如果初始化了部分元素, 那么其他的字符会被初始化为 ‘\0’

3. 字符数组不能存中文;

4. 如果制定的字符串数组长度小于等于字符串长度, 会出现存储不下的情况

5. 所以, 使用字符数组存储字符串数据的时候, 声明的时候最好不要指定长度

6.  scanf(“%s”, array);  //这时候不需要带&,  因为这时候 数组 array的 名字本身就能够代表其首地址

7. 用scanf进行字符串的输入的时候, 如果输入的长度大于数组长度, 不安全; 如果输入了空格, 就会认为输入结束

8. 不能用sizeof来计算字符串的长度, (有可能实际的字符串只占了数组的一部分), 用strlen();

另一种方法: while循环, 从第一个开始计数, 遇到 \0 结束;

时间: 2024-11-07 04:48:50

C-二维数组作为函数参数, 字符数组的相关文章

C语言中值得深入知识点----数组做函数参数、数组名a与&a区别、数组名a的"数据类型"

1.数组作为函数参数 C语言中,数组做为函数的参数,退化为指针.数组作为参数传给函数时,传的是指针而不是数组,传递的是数组的首元素的地址.这里我们以将以整形变量排序来讲解. void sortArray(int a[] ,int num )以及void sortArray(int a[100] ,int num )都可以用void sortArray(int *a ,int num )表示.一般来说函数参数如果为数组,可以有两个参数,一个是数组名,一个是数组长度.对于排序而已,一般是要知道给定数

数组作为函数参数

一.一维数组名作函数参数 用数组名作函数参数,应该在主调函数和被调函数分别定义数组,例如 <span style="font-size:18px;">void main() { void f(int b[10]);//void f(int b[]) int a[10]; f(a); }</span> 在被调用函数中声明了形参数组的大小为10,但在实际中,指定其大小是不起任何作用的,因为C语言编译对形参数组大小不做检查,只将实参数组的首元素地址传给形参数组.形参数

C语言 数组做函数参数退化为指针的技术推演

//数组做函数参数退化为指针的技术推演 #include<stdio.h> #include<stdlib.h> #include<string.h> //一维数组做函数参数退化为指针的技术推演 void printfA(char * strarr[3]); //计算机中,数组都是线性存储,二维数组元素也是一个个的排列的 //例如: 1,2,3,4,5,6,7,8,9 像这组数据 我们可以认为是一维数组 int a[9]={1,2,3,4,5,6,7,8,9}; //也

c语言中二维数组作函数参数以及二维数组的理解

当二维数组作函数参数接受主调函数中的二维数组时,退化为一个指向数组的指针. 在此引用<c与指针>中的观点:作为函数 参数的多位数组名的穿递方式和一维数组名相同--实际传递的是个指向数组第一个元素的指针.但是,两者之间的区别在于, 多维数组的每个元素本身是另外一个数组,编译器需要知道它的维数,以便为函数形参的下标表达式进行求值.

二维数组作为函数参数的几种方法

#include <stdio.h> #define N 5 void fun1(int a[N][N]) { int i,j; for (i=0;i<N;i++) { for (j=0;j<N;j++) { if (i>j) { a[i][j]+=a[j][i]; a[j][i]=0; } } } } void fun2(int **a,int m,int n) { int i,j; for (i=0;i<m;i++) { for (j=0;j<n;j++) {

二维数组作为函数参数深度详解

        前几天和同学讨论数组作为函数参数,感觉各种困惑.花了一些时间在网上查看了一些资料,并加上自己的理解.记录一下! 一. 指向指针的指针和指向数组的指针 很多人以为"指向数组的指针"就是"指向指针的指针",于是有人写这样的代码: int a[3][4]; int **p = a; //错误 数组实际类型是int [3][4],在作为右值时可以被转化为int (*)[4],它们都和int **不同,自然不可用. 那么,你要用一个指针来指向a,就要用一个

二维数组做函数参数、指向指针的指针做函数参数

这里有一篇文章  写的很好http://blog.csdn.net/f81892461/article/details/8974087 该文章中有一句话  总之就是:数组无法作为参数,总会被编译器将地址赋值给形参指针的,即使指针定义成数组形式,也还是指针.然后各种差别都是由数组和指针不同的定位元素的方式导致的. 这句话说的很对啊,数组做形参的是时候都是被当成指针来处理的.不明白这句话的可以看一下,参考文章链接里的那幅图,注意比较一下下图中的两个:data+1,第一个data+1指向的是元素dat

C++二维数组做函数参数

二维数组做函数参数的形式主要有: /对于一个m行n列int元素的二维数组 //函数f的形参形式 f(int daytab[m][n]) {...} //以下两种可以忽略行数 f(int daytab[][n]) {...} f(int (*daytab)[n]) {...} 这里都不能忽略第二维的大小.主要 原因是二维数组在栈内分配的内存是连续的,它的每一行都有相同的元素,这样,array[i][j] 和 *(*(array +i) +j)是一样的,程序是知道array+i的i实际上偏移了i*N

C++_二维数组作为函数参数的使用方法

二维数组作为函数参数的使用方法 /*01)恒等式:ar2[r][c] == *(*(ar2+r)+c)03) ar2+r指向编号为r的元素,该元素由c个int型(或其他类型)数组成,编号从0开始02)int a[100][4]; ....   int total = sum(a,100); //在主函数中调用sum()函数,使用二维数组中的全部的数据   int total = sum(a,10); //在主函数中调用sum()函数,使用二维数组中的前十行数据   int total = sum