c语言 数组和指针区别

生活 2019-02-26 10:41:47 2667

本文收集整理关于c语言 数组和指针区别的相关议题,使用内容导航快速到达。

内容导航:

  • Q1:c语言中数组和指针的区别与联系
  • Q2:C语言中,指针和数组的区别和联系?
  • Q3:C语言 char 字符数组 和 字符指针 作为 函数参数 的区别
  • Q4:C语言中:数组指针与指针数组有什么区别?
  • Q5:C语言中数组名和指针的区别
  • Q6:C语言中,数组和指针定义在内存方面的区别在哪?
  • Q1:c语言中数组和指针的区别与联系

    数组和指针是两个概念
    数组是数的集合
    而指针是一个地址。就好比我给你一个地址,你要上门去看看才知道到底住了什么人
    联系的话,数组可以用指针来指向。

    Q2:C语言中,指针和数组的区别和联系?

    区别:C语言把内存划分成四个区,它把一般的变量和数组等存在于内存中的栈区,所以数组在C语言的定义中只是一组同类型的普通变量,即使这个变量有可能是指针。所以他的作用比指针小的很多,而指针可以指向任何区的任何数据,所以就会觉得指针和数组名很像,但是必须要注意的是,数组名只是指针中的一种,它是指针中只指向栈区的且指针的移动范围是有限的,即数组长度。而且数组在定义之初就已经有了自己的内存,一般的指针如果未指向某一个内存块时,它是没有自己的内存的,即所谓的野指针。
    联系:如上面所说,数组只是定义在栈区的一个连续变量,它的首地址就是一个指针。
    总结:不仅数组有指针,所有变量都有指针,指针说白了就是内存中的地址,就像一个房间必须有一个房间号。在C/C++语言中定义一个指针,就是在栈区开辟一个内存空间用来存放它指向的内存地址,然后给指针赋值,就是把地址值赋值给刚才开辟的内存空间,然后通过访问该内存中的地址值来间接访问该地址下存放的数据。如果该地址值指向的是一块静态存储区,如字符串常量等,当然就不可以修改指向的内容啦。 经验之谈,楼楼加分啊

    Q3:C语言 char 字符数组 和 字符指针 作为 函数参数 的区别

    在C语言中,数组作为参数,进行传递时,传递的是指针 ,换句话说,字符数组作为参数,进行传递时,传递的是字符数组的起始地址,相当于一个字符指针,两者没有区别。比如下面的代码:

    123456789101112#includevoidf1(char*s){printf("%s\n",s);}voidf2(charsa[]){printf("%s\n",sa);}intmain(){charrsa[]="worldhello";f1(rsa);f2(rsa);return0;}

    Q4:C语言中:数组指针与指针数组有什么区别?

    数组指针是指向这个数组首地址的指针,指向对象是这个数组;
    指针数组是存放一类指针的数组,这个数组的每个元素都是一个指针;
    例子:
    int a[10];
    int* s;
    s = a;//这里s就是一个数组指针,它的值就是数组a 的首地址;当然,如果a是一个整数,那s就是一个指向整型的指针;
    int a;
    int* s[5];
    for(int i=0;i<5;i++)s[i]=a;
    //这里s就是一个指针数组,它的每个元素都是整型变量a的地址
    应该算比较明白了吧
    谢楼上提醒

    Q5:C语言中数组名和指针的区别

    数组在当作参数传递时,可以当作指针;当然,参数传递相当于赋值操作,所以用指针来接受数组的值也是可以的。
    除此之外,指针就是指针,数组就是数组,一点也不一样,例如
    1,数组名不能作为左值,即不能被赋值,也不能进行++ --操作
    2,sizeof 数组名 和 sizeof 指针 不同

    Q6:C语言中,数组和指针定义在内存方面的区别在哪?

    1,指针变量用于保存数据的地址,数组用于直接保存数据(当然你可能见过,数组的每个元素是指针,不过,一组指针也是数据,它们各自的内容才是地址)
    2,访问方式:指针是间接访问,首先取得指针的内容作为地址,再去该地址访问数据;数组是直接访问,数组名即是地址
    3,指针通常用于动态数据;数组通常用于固定数目和类型的一组数据
    4,定义指针变量并不会带来内存分配,要自行分配内存并且将指针变量的内容改写为分配好的地址,通常用内存分配函数如malloc达到;定义数组会隐式分配内存
    5,对sizeof操作符的返回值影响,sizeof(指针)永远会返回平台指针大小,通常32位机返回4,64位返回8.而sizeof(数组名),则会返回数组的内存大小,这取决于数组包含多少个数据。
    当然,在某些情况下,是可以混用的,比如作为函数的形参,无论你写成char s[]还是char *s,都没有区别,在函数内对这两种传来的实参作sizeof,也都只能是得到指针大小,并不会因为你写char s[],而返回数组的大小。
    例如:
    void fun(char s[])//和void fun(char *s)等同
    {
    printf("%d\n", sizeof(s));//输出4或者8,看平台和操作系统是32还是64、}
    调用:
    main()
    {
    char s[6] = {h, e, l, l, o, \0};
    fun(s);
    }

    相关文章
    c语言字符串输出一部分2019-01-22
    c语言怎么生成exe文件2019-01-27
    c语言十进制转十六进制2019-02-13
    c语言定义多个结构体2019-02-17
    c语言输入数字变成字母2019-02-19
    设置c语言中字体颜色2019-02-20
    c语言逻辑运算符优先级2019-02-21
    C语言最大值最小值编程2019-02-22
    c语言打开文件怎么输入2019-02-25
    c语言字符串长度怎么算2019-02-27