精华内容
下载资源
问答
  • //用数组名和指针变量作为形参 //一般选择用指针型变量操作,而不用数组名作为形参。原因在数组名和指针变量的区别一文当中。 //实现所有元素加1 void fun1(int array[],int length) { int i=0; for(;i;i++) { ...

    #include <stdio.h>
    #include <stdlib.h>
    #define MAXSIZE 10
    //用数组名和指针变量作为形参
    //一般选择用指针型变量操作,而不用数组名作为形参。原因在数组名和指针变量的区别一文当中。
    //实现所有元素加1
    void fun1(int array[],int length)
    {
        int i=0;
        for(;i<length;i++)
        {
            (*(array+i))++;//或者 array[i]++;
        }
    }
    //实现所有元素减1
    void fun2(int *arr,int length)
    {
        int i=0;
        for(;i<length;i++)
        {
            arr[i]--;//或者 *(arr+i)--;
        }
    
    }
    
    int main()
    {
        int arr[MAXSIZE]={1,2,4,7,6,7,2,7,4,5};
        int i=0;
        for(i=0;i<MAXSIZE;i++)
        {
            printf("arr[%d]=%d,",i,arr[i]);
        }
        printf("\b \n");
        fun1(arr,MAXSIZE);
    
        for(i=0;i<MAXSIZE;i++)
        {
            printf("arr[%d]=%d,",i,arr[i]);
        }
        printf("\b \n");
        fun2(&arr[0],MAXSIZE);
            for(i=0;i<MAXSIZE;i++)
        {
            printf("arr[%d]=%d,",i,arr[i]);
        }
        printf("\b \n");
        return 0;
    }
    


    程序运行结果:
    arr[0]=1,arr[1]=2,arr[2]=4,arr[3]=7,arr[4]=6,arr[5]=7,arr[6]=2,arr[7]=7,arr[8]=4,arr[9]=5
    arr[0]=2,arr[1]=3,arr[2]=5,arr[3]=8,arr[4]=7,arr[5]=8,arr[6]=3,arr[7]=8,arr[8]=5,arr[9]=6
    arr[0]=1,arr[1]=2,arr[2]=4,arr[3]=7,arr[4]=6,arr[5]=7,arr[6]=2,arr[7]=7,arr[8]=4,arr[9]=5
    Process returned 0 (0x0)   execution time : 0.608 s
    Press any key to continue.
    展开全文
  • 数组名和指针变量的区别 今天讲一下数组名和指针变量的区别,只说结果,不过分析。刚刚看到C语言中,有一个sizeof(数组名)和sizeof(指针变量),平时没有注意这两者的区别,在这里记下笔记,不喜勿喷。sizeof(数组名)...

    数组名和指针变量的区别

    今天讲一下数组名和指针变量的区别,只说结果,不过分析。刚刚看到C语言中,有一个sizeof(数组名)和sizeof(指针变量),平时没有注意这两者的区别,在这里记下笔记,不喜勿喷。sizeof(数组名)是计算该数组所占用的字节大小。而sizeof(指针)是计算的指针变量做占用的字节大小。代码如下。

    #include <stdio.h>
    int main()
    {
        int A[10];
        int *a = A;
        
        printf("the size of A = %d!\r\n", sizeof(A));  
        printf("the size of a = %d!\r\n", sizeof(a));  
        
        return 0;
    }

    结果如下:
    运行结果
    从图中可以看到确实是和我们上面讲的一样。但在看另外一篇文章有说到这么一句话:数组地址,也就是数组名在作为函数参数传递过程中,会退化成指针。这也是为什么指针作为参数传递时,经常要一个长度。博客感谢这位博主。
    虽然如此,但我还是自己验证了一下。代码验证如下。

    #include <stdio.h>
    void fun(int *A)
    {
     printf("the size of A = %d", sizeof(A)); 
    }
    
    int main()
    {
     int A[10] = {0};
     
     printf("the size of A = %d!\r\n", sizeof(A));
     fun(A);
     
     return 0;
    }

    运行结果如下所示:
    在这里插入图片描述
    实验结果和上面说的一样,数组名在变成函数参数时,会变成指针变量。
    该博客只是记录自己的笔记。不喜勿喷!

    展开全文
  • 数组 指针 C

    数组名和指针主要有如下三点差异:

    • 数组名是只读的,指针变量可读可写。
    • 使用sizeof时,sizeof(数组名)得到整个数组所占字节数,sizeof(指针变量)得到指针变量所占字节数(和整型变量相同)。
    • 当数组用作函数参数的时候,数组就是完完全全的指针。

    例:

    int *p;
    int arr[10];
    

    对于上面两个定义。可以通过p[i]访问数组成员,也可以通过*(arr+i)访问数组成员,这是两者相同的地方。
      但是p可以重新赋值,例如p=arr是允许的,而arr=p是禁止的。同理,p++,++p都可以,但是arr不可以做自增运算,因为自增运算需要写入。
      sizeof(p)为4,sizeof(arr)为40。(假设32bit机器)
      当上述arr的定义出现在函数参数中时,那么在函数中,arr++和++arr,甚至arr=p都是可以的,sizeof(arr)也等于4(假设32bit机器),因为当数组作为函数参数的时候,该数组就完完全全是指针了。

    下面是曾经考过的几个题目,大家可以再做做。
    /*************************************************************************/
    第5题(单选/3分):

    void example(char acHello[])
    {
        printf("%d", sizeof(acHello));
    }
    
    void main(void)
    {
        char acHello[] = "hello";
        example(acHello);
    }
    以上程序的输出结果是: A
    
    A  4
    B  5
    C  6
    D  hello
    

    /*************************************************************************/
    第21题(多选/4分):

    int a[9] = {0};
    int *p;
    p = a;
    请问以下哪些可以正确表示a[1]的值:A D
    
    A *(p+1)
    B *(p++)	/*此处错位在于++i和i++的用法*/
    C *(a++)
    D *(a+1)
    

    /*************************************************************************/

    19题(多选/4分):以下为Windows NT 下的32位 C程序,
    char str[] = "Hello";
    char *p = str;
    int n = 10;
    void *ptr = (void *)malloc(100);
    长度为4的是:B C D
    
    A sizeof(str)
    B sizeof(p)
    C sizeof(n)
    D sizeof(ptr)
    

    /*************************************************************************/

    展开全文
  • 数组名指针变量 作 函数参数 实参:数组名形参数组名 数列倒序排放 #include<stdio.h> int main() { void inv(int x[],int n); int i,a[10]={1,2,3,4,5,6,7,8,9,0}; inv(a,10);//实参:数组名 for...

    数组名,指针变量 作 函数参数

    实参:数组名;形参:数组名

    数列倒序排放

    
    #include<stdio.h>
    int main()
    {
    	void inv(int x[],int n);
    	int i,a[10]={1,2,3,4,5,6,7,8,9,0};
    	inv(a,10);//实参:数组名
    	for(i=0;i<10;i++)
    		printf("%d ",a[i]);
    	return 0;
    }
    void inv(int x[],int n)//形参:数组名
    {
    	int temp,i,j,m=(n-1)/2;
    	for(i=0;i<m;i++)
    	{
    		j=n-1-i;//与i相对应的倒序数
    		temp=x[i];//前后互换
    		x[i]=x[j];
    		x[j]=temp;
    	}
    }
    

    实参:数组名;形参:指针变量

    
    #include<stdio.h>
    int main()
    {
    	void inv(int *x,int n);
    	int i,a[10]={1,2,3,4,5,6,7,8,9,0};
    	inv(a,10);//实参:数组名
    	for(i=0;i<10;i++)
    		printf("%d ",a[i]);
    	return 0;
    }
    void inv(int *x,int n)// 形参:指针变量
    {
    	int *i,*j,*p;
    	int temp,m=(n-1)/2;
    	i=x;     //指针变量i指向第一个数组元素
    	j=x+n-1; //指针变量j指向最后一个数组元素
    	p=x+m;   //指针变量p指向中间的数组元素
    	for(;i<p;i++,j--)
    	{
    		temp=*i;//前后互换
    		*i=*j;
    		*j=temp;
    	}
    }
    

    实参:指针变量;形参:指针变量

    
    #include<stdio.h>
    int main()
    {
    	void inv(int *x,int n);
    	int i,a[10]={1,2,3,4,5,6,7,8,9,0};
    	int *p=a;//指针变量p指向a
    	inv(p,10);//实参:指针变量
    	for(p=a;p<(a+10);p++)
    		printf("%d ",*p);
    	return 0;
    }
    void inv(int *x,int n)// 形参:指针变量
    {
    	int *i,*j,*p;
    	int temp,m=(n-1)/2;
    	i=x;      //指针变量i指向第一个数组元素
    	j=x+n-1; //指针变量j指向最后一个数组元素
    	p=x+m;   //指针变量p指向中间的数组元素
    	for(;i<p;i++,j--)
    	{
    		temp=*i;//前后互换
    		*i=*j;
    		*j=temp;
    	}
    }
    

    指针变量作为实参,必须使指针变量有一个确定值,即使指针变量指向一个已定义的对象–(数组)

    实参:指针变量;形参:数组名

    
    #include<stdio.h>
    int main()
    {
    	void inv(int *x,int n);
    	int i,a[10]={1,2,3,4,5,6,7,8,9,0};
    	int *p=a;//指针变量p指向a
    	inv(p,10);//实参:指针变量
    	for(p=a;p<(a+10);p++)
    		printf("%d ",*p);
    	return 0;
    }
    void inv(int x[],int n)//形参:数组名
    {
    	int temp,i,j,m=(n-1)/2;
    	for(i=0;i<m;i++)
    	{
    		j=n-1-i;//与i相对应的倒序数
    		temp=x[i];//前后互换
    		x[i]=x[j];
    		x[j]=temp;;
    	}
    }
    
    展开全文
  • 数组名指针变量

    2016-05-03 10:27:40
    今天偶然间看到一个问题,于是乎去学习了...数组名:是指针常量。 出错代码: int aa[10] = {0}; int num = 0; for(num = 0; num {  aa[num] = num; } int *bb = (int *)malloc(40); memset((void *)bb, 0, 40); f
  • 数组名指针变量作函数参数的四种情况 2016年10月02日 13:43:49 阅读数:2154 函数的参数可以是变量,也可以是数组。当整个数组作为函数的参数时,实际上是数组的地址作为参数。由于实参可以是表达式,数组元素...
  • 数组名指针变量的区别

    千次阅读 2010-06-03 16:24:00
    转载自:http://hi.baidu.com/thl53/blog/item/d6184010d36b7118b8127bc7.html 指针是C/C++语言的特色,而数组名指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。...
  • 指针数组和指向指针变量的指针指针数组与main()函数形参声明指针数组与声明普通数组的语法类似,其语法格式如下:类型 * 数组变量[长度];指向指针变量的指针指针变量也是变量,指针变量也需要保存在内存中,那么指针...
  • 形参中的数组指针变量不是数值 #include<stdio.h> //void printf_array(int a[1000],int n) //void printf_array(int a[],int n) void printf_array(int *a,int n) //这三种写法等价 { int i = 0; for ...
  • 数组名和指针作为形参

    千次阅读 2014-09-15 15:43:04
    1.用数组名做函数参数 f(int arr[],int n)① 调用时采用:f(arr,10) 由于数组名代表的是数组的地址,所以用数组名做参数...在用指针变量形参以接受实参数组传递的地址时,有两种方法: ①采用一维数组相同的
  • 形参中的数组,不是数组,是指针(对应数据首元素地址,用sizeof获取的是指针大小,而不是数组大小) 形参数组:int a[100], int[a], int *a 对编译器而言是一样的,都当做int *处理 */ void f(int a[100]){ cout...
  • 传参时传数组名和普通变量名的区别 case 1: 当参数是数组时,数组名就是这些元素的首地址,其实数组相当于指针,所以相当于你传了一个指针!参数数组变化,也即原数组发生变化。 case 2: 而传一个普通的变量时,也即...
  • 数组名和指针区别

    2019-06-30 11:37:39
    前两天同学问了我一个问题:“数组名和指针有什么区别,或者说这两者有没有区别?”  我回顾了下,大学课堂上老师讲的,貌似记得老师说数组名就相当于指针,比如:“一维数组就是一级指针”,“二维数组是二级指针...
  • 数组名和指针

    2013-09-03 09:22:15
    1. #include 2. int main(int argc, char* argv[]) 3. { 4. char str[10]; 5. char *pStr = str;... 1、数组名不是指针 ... 我们先来推翻"数组名就是指针"的说法,用反证法。  证明 数组名不是指针
  • 数组名和指针的区别

    2013-11-10 12:25:56
    只有在作为函数的参数时,数组名和指针才是相同的(即“数组名就是指针”,只适用于这种情况)!其余情况一律不同! 第一:数组名不是指针!它们的大小不同 第二:数组名很像指针!比如,数组名可以赋给指针。又...
  • 4.1.数组指针和指针数组二重指针

    千次阅读 2016-06-30 20:23:57
    数组指针和指针数组从字面上来看很纠结,有时候我也搞不清,分不清哪样的是数组指针,哪样的是指针数组。这东西就不是靠记忆的,我们采取分析加对比分层剥离的方法分析。1.概念区别 1.1.数组指针:定语在前,主语在...
  • gc, char* argv[]) 3. { 4. char str[10]; 5. char *pStr = str;... 我们先来推翻"数组名就是指针"的说法,用反证法。  证明 数组名不是指针  假设:数组名指针;  则:pStrstr都
  • 一、字符数组形参 有时候我们需要通过调用一个函数实现对一个传入的数组进行赋值,从而改变其值。当字符数组本质是上也是指针。 void change(char p[]) { strcpy(p, "efgh"); //p[0] = 'e'; //p[1] = 'r';...
  • 指针是C/C++语言的特色,而数组名指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是...
  • 数组名指针区别

    2019-07-03 09:10:59
    在最开始学习C语言的时候,最常听到的说法之一就是“数组指针是相同的”,不幸的是,这是一种非常危险的说法,并不...那按照最常听到的说法“数组名和指针是相同的”,那么数组名也应该有自己的存储空间喽? ...
  • 开门见山,今天的主要内容是:指针数组,数组指针,函数指针,函数指针数组,函数指针数组指针。 看见题目是不是有点晕晕的感觉,没关系等看完这篇博客你会觉得他们其实也很好理解的! 接下来我一个一个介绍。 一....
  • 当我们操作指针时,当碰到几类让我们
  •  指针是C/C++语言的特色,而数组名指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是...
  • 数组名是不是指针

    千次阅读 多人点赞 2015-04-09 20:08:02
     指针是C/C++语言的特色,而数组名指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是...
  • 那么为什么作为函数形参数组和指针申明可以互换呢? 这是一种便利。 由于数组会马上蜕变为指针, 数组事实上从来没有传入过函数。允许指针参数声明为数组只不过是为让它看起来好像传入了数组, 因为该参数可能在函数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,332
精华内容 23,332
关键字:

形参数组名和指针变量