精华内容
下载资源
问答
  • 1、下面两个函数my_array_func和my_pointer_func第一个输出结果是否一样?(P6和P17) 2、每个函数的第一个输出和第二个输出结果是否一样?(P6与P7,,,P17与P18) 能猜对的,估计也都理解C里面数组和指针的区别于...

    两个问题:

    1、下面两个函数my_array_func和my_pointer_func第一个输出结果是否一样?(P6和P17)

    2、每个函数的第一个输出和第二个输出结果是否一样?(P6与P7,,,P17与P18)

     

    能猜对的,估计也都理解C里面数组和指针的区别于联系。感觉自己不是很理解的,建议看C专家编程P84的图。

     

    代码如下:

     1 char ga[] = "abcdefghijklm";
     2 
     3 void
     4 my_array_func(char ca[10])
     5 {
     6     printf("addr of array param = %#x\n", &ca);
     7     printf("the element of ca = %#x\n", ca);
     8     printf("addr (ca[0]) = %#x\n", &(ca[0]));
     9     printf("addr (ca[1]) = %#x\n", &(ca[1]));
    10     printf("++ca = %#x\n\n", ++ca);
    11 }
    12 
    13 
    14 void
    15 my_pointer_func(char *pa)
    16 {
    17     printf("addr of ptr param = %#x\n", &pa);
    18     printf("the element of pa = %#x\n", pa);
    19     printf("addr (pa[0]) = %#x\n", &(pa[0]));
    20     printf("addr (pa[1]) = %#x\n", &(pa[1]));
    21     printf("++pa = %#x\n\n", ++pa);
    22 }
    23 
    24 int
    25 main()
    26 {
    27     printf("addr of global array = %#x\n", &ga);
    28     printf("addr (ga[0]) = %#x\n", &(ga[0]));
    29     printf("addr (ga[1]) = %#x\n\n", &(ga[1]));
    30     
    31     my_array_func(ga);
    32     my_pointer_func(ga);
    33         
    34     return 0;
    35 }

    答案 

    C:\Program Files\Microsoft Visual Studio 10.0\VC>array.exe
    addr of global array = 0x8bb000
    addr (ga[0]) = 0x8bb000
    addr (ga[1]) = 0x8bb001
    
    addr of array param = 0x22f9d8
    the element of ca = 0x8bb000
    addr (ca[0]) = 0x8bb000
    addr (ca[1]) = 0x8bb001
    ++ca = 0x8bb001
    
    addr of ptr param = 0x22f9d8
    the element of pa = 0x8bb000
    addr (pa[0]) = 0x8bb000
    addr (pa[1]) = 0x8bb001
    ++pa = 0x8bb001

    转载于:https://www.cnblogs.com/ziyoudefeng/archive/2012/08/17/2644630.html

    展开全文
  • C++中函数形参如果为数组的话,那么进行实参传递时,实参实际上换转化成指针。参考下面的例子: #include<iostream> using namespace std; void fun(int arr[]) { arr[0] = 9; } int main() ...

      C++中函数的形参如果为数组的话,那么进行实参传递时,实参实际上换转化成指针。参考下面的例子:

    #include<iostream>
    using namespace std;
    
    void fun(int arr[])
    {
        arr[0] = 9;
    
    }
    int main()
    {
        int a[] = {1,2,3};
        int *b = new int[1];
        *b = 2;
        fun(a);
        cout<<a[0]<<endl;
        fun(b);
        cout<<b[0]<<endl;
    }
    

    运行结果为:

    通过上面的结果可知,

    1.数组a的本质就可以看成是一种指向数组首地址的指针。

    2.在实参传递的过程中,传给fun函数的实际上是一个指针,这个指针存储的地址与a的首地址相同,所以改变这个指针指向内容的值,数组a的值也会发生改变。但改变这个指针本身,并不会对a产生影响。

    转载于:https://www.cnblogs.com/wangkundentisy/p/8808601.html

    展开全文
  • 求大神,实参只能是一个数,怎么能简写,用一个数组代替很多数呢? 举个例子,如何在函数参数里边输入两个n维向量?
  • 所以试图在别的函数中无法得到传递数组的长度。 19 只能先计算好长度后再传过去。 20 */ 21 void false_sort( int a[]){ 22 int length= sizeof (a)/ sizeof (a[ 0 ]); 23 printf( " length=%d\...
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 /*
     4     程序运行结果:
     5     False sort
     6     length=1
     7     4
     8     Right sort
     9     length=5
    10     4 5 7 8 9
    11 */
    12 /*
    13     个人总结:
    14     C/C++ 传递数组,
    15     虽然传递的是首地址地址,
    16     但是参数到了函数内,就成了普通指针,
    17     不再是数组首地址了,
    18     所以试图在别的函数中无法得到传递数组的长度。
    19     只能先计算好长度后再传过去。
    20 */
    21 void false_sort(int a[]){
    22     int length=sizeof(a)/sizeof(a[0]);
    23     printf("length=%d\n",length);//输出为1
    24     for(int i=0;i<length-1;i++){
    25         for(int j=0;j<length-1-i;j++)
    26             if(a[j]>a[j+1]){
    27                 int temp=0;
    28                 temp=a[j];
    29                 a[j]=a[j+1];
    30                 a[j+1]=temp;
    31             }
    32     }
    33     //printf("%s\n",a);
    34     for(int i=0;i<length;i++){
    35         printf("%d ",a[i]);
    36     }
    37 }
    38 //void right_sort(int a[],int length){
    39 void right_sort(int *a,int length){
    40     printf("length=%d\n",length);
    41     for(int i=0;i<length-1;i++){
    42         for(int j=0;j<length-1-i;j++)
    43             if(a[j]>a[j+1]){
    44                 int temp=0;
    45                 temp=a[j];
    46                 a[j]=a[j+1];
    47                 a[j+1]=temp;
    48             }
    49     }
    50     //printf("%s\n",a);
    51     for(int i=0;i<length;i++){
    52         printf("%d ",a[i]);
    53     }
    54 }
    55 int main()
    56 {
    57     int a[]={4,5,8,7,9};
    58     //char b[]={"This is a string!"};
    59     int length=sizeof(a)/sizeof(int);
    60     //printf("%d\n",sizeof(b)-1);
    61     printf("False sort\n");
    62     false_sort(a);
    63     printf("\nRight sort\n");
    64     right_sort(a,length);
    65     return 0;
    66 }

     

    转载于:https://www.cnblogs.com/stefango/p/9633844.html

    展开全文
  • 原因:在一般情况下,数组名的确是不可修改的,只是在上图第一行中lineptr作为函数形参,其实编译器并不是把它当做数组名,而是看作一个指针  可以这样思考一下:c语言规定,数组名作为实参传递给被调用函数相应...

    问题描述:

    1 void writelines(char *lineptr[], int nlines)
    2 {
    3     while(nlines-- > 0)
    4     {
    5         printf("%s\n", *lineptr++);
    6     }
    7 }

    C语言规定,数组名指向数组的首地址,数组已经定义,则数组名也就定了,不可更改,所以数组名是一个常量,不能对它执行变量相关的操作,比如说赋值或者自增等,那么为什么在上图中第一行中lineptr被定义为一个字符指针数组,为什么在第5行中却对它进行了自增操作?

     

    原因:在一般情况下,数组名的确是不可修改的,只是在上图第一行中lineptr作为函数形参,其实编译器并不是把它当做数组名,而是看作一个指针

              可以这样思考一下:c语言规定,数组名作为实参传递给被调用函数相应形参的不是整个数组,而是数组的首地址,也就是指针,那么如果lineptr被认为是一个数组名的话,由于数组名不可被赋值,那么实参将不能传递给形参,所以编译器将lineptr认为是一个指针变量,只有当它是一个指针变量时,它才能心安理得地接受主调函数传过来的实参,所以 当一个函数的形参被声明为数组形式时,在编译器眼中它不是数组,而是一个指针变量。

     

    另:上次说到了二级指针,其实,这里的lineptr就是一个二级指针,指向指针的指针。

      如果是void writelines(char lineptr[]); 如果是这种形式的话,那么lineptr也是指针,一级指针,指向的是char类型的数组

    转载于:https://www.cnblogs.com/latup/p/8642268.html

    展开全文
  • 调用方法中有形参为数组函数: fun checkIndex(index: Int, arr: Array) { if(index in 0..arr.lastIndex) //arr.lastIndex返回的是数组的最后一位的下标 println("index in bounds") else printl
  • 1、 编写函数int stat(int a[],int n,int c[][2])。a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位的整数,从而生成有n/2个元素组成的整数数列...
  • 函数形参为引用或指针时,函数对实参的修改有效,不用专门return 当形参和实参不是指针类型时,在该函数运行时,形参和实参是不同的变量,他们在内存中位于不同的位置,形参将实参的内容复制一份,在该函数运行...
  • #include void tiangaoyou(int m[]); void main(void) { int a[5],i; for (i = 0; i ; i++) { scanf_s("%d", &a); } tiangaoyou(a[5]); for (i = 0; i ; i++) { printf("%d", a[i]);...}
  • 1.数组的反射 a.具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象。 ...2.关于对形参为数组函数的反射的两种调用方法的解析如下,见代码注释:    
  • #include using namespace std; void invert(int *A,int); int main() { int A[10],n; cout; for(n=0;n;n++) cin>>A[n]; invert(A,10); return 0; } void invert(int *A,int n) { int temp,j;...
  • 从PHP函数参数为数组和对象的区别说开去 ...函数参数为数组和对象的区别 变量的底层结构 对象的底层结构 *HashTable —PHP的灵魂 函数参数为数组和对象的区别 先写一个不算很好的例子但是足够说明问题了。...
  • c语言中函数的实参为数组的时候形参的格式 数组传参: 当我在使用自定义函数的时候 函数所要调用的实参为一个数组arr的时候发现 用于计算数组长度的一个公式(初学者只知道这一个) len=seizeof(arr)/seizeof...
  • 多维数组指针和函数形参

    千次阅读 2014-07-21 10:51:52
    函数形参为数组时: 如果为一维数组,数组大小可以不写,数组名在形参中退化为指针 void foo(int a[]) { } 调用: int *p; int a[10]; p=a; void foo(p); void foo(a); 是合理的 如果为二...
  • 函数形参的理解

    2020-11-01 18:50:05
    一个典型函数定义包括四个部分:返回类型,函数的名字,形参列表和函数体。格式如下 int max(int a,int b) {函数体} 函数的作用 在我看来,函数的一般作用是对一定的输入产生一定的输出,当然可以没有输入;至于...
  • 请看下面例子,调用了method()后,为什么int型的n值没变,但是数组内部的值会变?(基本数据类型不变,引用数据类型内部的值会变) public class Test { public static void main(String[] args) { ...
  • 数组作为函数形参

    2020-03-09 22:04:24
    数组作为函数形参会退化为指针...//以上三种形参是等价的,数组的方括号在函数形参中是无意义的,但是void sort_array(int a[0]);会报错,因为方括号中不能为0 再举个例子说明: 从图中的代码可以看出,j并不...
  • 函数返回值 数组
  • 测试环境: win10 x86-64 gcc: x86_64-pc-cygwin...2)数组作为函数形参时将被转化为指向数组第一个元素的指针,无论是int a[10]还是int a[]形式的形参,在函数内部都是int *a形式指针 3)没有办法直接将数组本身...
  • java函数形参之 … 省略号 有看过java反射相关一些源码的同学应该会看到这样的形参 public static void method(String... str){// ... 是什么意思?有什么用呢? } 写个demo public static void main(String[] ...
  • // arr这个形参其实是重新声明的一个变量名 虽然指向的是同一个传进去实参的地址 // 传进去的是一个指针 // 函数的参数 其实是声明了一个变量存储传来的指针 // 形参的地址改变了 但是不会影响外面实参的引用地址的...
  • 函数形参中的数组传递

    千次阅读 2010-09-23 16:48:00
    数组形参可声明为数组的引用,如:function( int (&arr) [10] )如果形参是数组的引用,编译器不会将数组实参转化为指针,而是传递数组的引用本身。数组大小成为形参和实参类型的一部分,编译器会检查实参大小和形参...
  • 当用实参副本初始化形参时,函数并没有访问调用所传递的实参本身,因此不会修改实参的值。 while 循环体虽然修改了 v1 与 v2 的值,但这些变化仅限于局部参数,而对调用 gcd 函数使用的实参...
  • 一维数组作为函数形参

    千次阅读 2018-04-25 14:53:53
    因此尽管函数GetSize的参数data被声明为数组,但它会退化为指针,size3的结果仍然是4. 二、数组的两个特殊性质 (1)不允许拷贝和赋值   不能将数组的内容拷贝给其他数组作为其初始值,也不能用数组为其他...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,362
精华内容 4,144
关键字:

函数形参为数组