在函数swap内部,通过这两个指针交换目标数据对象的值。 注意,不是交换指针x,y的值,而是交换目标数据对象a,b的值。所以,需要在指针前使用取值运算符*。 2.仅有首地址的指针类型void* 若要用函数swap交换两个int类型的变量,必须传入指向这两个int类型变量的指针。函数内部可以通过指针知道对象的首地址和类型。 但...
char *name 占8个字节指向常量区的名字,自己并不存在,是一个地址,是一个指针. 4. 数组作为函数参数的时候,其实传递给函数的是数组的首地址. 声明:printMaxValueOfArray(int a[100]); 系统默认:printMaxValueOfArray(int *a); 也就是说不管定义中a[200]还是a[100],系统默认的都是数组a的首地址即a. 注...
此时不是不能用指针,当然也可以用指针,只是没有必要。 以后在使用函数的时候,只要函数的参数不满足上面这两个条件,那么全部都用指针。此外需要注意的是,数组名本身就是地址,所以如果传递数组的话直接传递就行了。接收的形参可以定义成数组也可以定义为同类型的指针,这点后面再讲。
在主函数中,将数组名a作为实参的值,也就是将&a[0]作为实参的值,然后在Print函数中,指向int型变量的指针p用于接收传递过来的值,并进行输出操作。 2.多维数组名作为函数参数传递 在二维数组中,数组名a是指向首行a[0]的指针,也就是说a=&a[0]; a[0]是指向首元素a[0][0]的指针,也就是说a[0]=&a[0...
当在调用函数时把数组名作为参数,那么也是在进行“传址调用”,因为数组名会自动地被转换为指向数组内第一个元素的指针。 通常情况下,函数需要返回指针,如下例函数 mkNode()。该函数动态地建立一个新的 Node 对象,并将其地址传递给调用者: #include<stdlib.h>structNode*mkNode(){structNode*pNode=malloc(sizeof...
现在,让我们将函数指针作为参数传递给快速排序函数"qsort",该函数使用一种算法对数组进行排序。 #include<stdio.h>#include<stdlib.h>#include<string.h> intcompare(constint*p,constint*q);int(*f)(constvoid*a,constvoid*b); intmain(){inta[] = {4,...
3、指针作为函数形参: (1)和数组作为函数形参是一样的.这就好像指针方式访问数组元素和数组方式访问数组元素的结果一样是一样的。我们来看示例: 代码语言:javascript 复制 #include<stdio.h>voidfunc3(int*a){printf("sizeof(a) = %d.\n",sizeof(a));printf("in func2, a = %p.\n",a);}intmain...
学习笔记中的内容多少会有一点文不对题,因为C语言中数组无法作为函数的一个传递参数。而数组名在作为函数传递参数使用的时候实际上也被转换成了一个指针。 编写如下代码; #include"stdio.h" char hello[] ="hello"; int main(void) { printf("%s\n",hello); ...
数组的首地址 , 变为指针地址 , 函数中无法判定数组的大小 ; 代码示例 : 代码语言:javascript 复制 #include<stdio.h>/* * 数组作为参数 会 退化为指针 */voidfun(int array[3]){printf("fun : sizeof(array)=%d\n",sizeof(array));}/*
使用指针**:可以将数组的地址作为指针传递给函数,并在函数内部使用指针来访问数组元素。```c void my...