美文网首页
c语言数组名和指针的关系

c语言数组名和指针的关系

作者: 李永开 | 来源:发表于2021-07-21 19:36 被阅读0次

一.数组名和指针

//
//  main.c
//  cdemo
//
//  Created by liyongkai on 2021/6/6.
//

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>



int main(int argc, const char * argv[]) {
   
    int arr[] = {1, 2, 3, 4};
    printf("%lu\n", sizeof(arr));   //16
    printf("%lu_%lu\n",&arr,&arr+1);//140732920755344_140732920755360 相差16
    //1. sizeof   2.&arr取地址符
    //以上两种情况下,arr指针代表的是数组本身,而不是指向数组的首元素地址的指针
    //除了以上两种情况下,数组名都是指向首元素的指针

    
    
    //2.arr是个指向常量的指针,如果赋值NUll会报一下的错误
    //arr = NULL;//Array type 'int [4]' is not assignable
    
    
    //下面的都可以正确打印
    for (int i = 0; i < sizeof(arr)/sizeof(int); i ++) {
        printf("%d",arr[i]);
        printf("%d", *(arr + i));
    }
 
}

二.数组下标是否能为负数

可以的,编译器对这块没有做要求,所以是可以的。

三. 定义数组指针

//
//  main.c
//  cdemo
//
//  Created by liyongkai on 2021/6/6.
//

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>



int main(int argc, const char * argv[]) {
   
    int arr[5] = {1, 2, 3, 4, 5};
    
    //1. 先定义数组类型,然后定义数组指针类型
    //typedef 定义数组类型
    typedef int (ARRAY_TYPE)[5];
    ARRAY_TYPE array;//  = int arr[5];
    
    for (int i = 0; i < 5; i ++) {
        array[i] = i;
    }
    
    for (int i = 0; i < 5; i ++) {
        printf("%d\n", i);
    }
    
    //定义 数组指针 类型, 指针指向数组
    ARRAY_TYPE *p = &array;
    printf("%d", *(*p + 1)); // 1   *p拿到了数组的首地址.
    
    
    
    //2.直接定义数组指针类型
    typedef int (*ARRAY_POINTER) [5];
    ARRAY_POINTER pa = &arr;
    
    
    //3. 直接定义数组指针变量
    int (*ARRAY_PARAM)[5] = &arr;
}

四.二维数组

//
//  main.c
//  cdemo
//
//  Created by liyongkai on 2021/6/6.
//

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>
#include <typeinfo>



void printArr(int (*parr)[3]) {
    
}

int main(int argc, const char * argv[]) {
    int arr1[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    
    int arr[][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    printf("%d\n",arr[2][2]);// 9
    printf("%d\n", *(*(arr+2) + 1));// 8
    
    printArr(arr);
}






相关文章

  • c语言数组名和指针的关系

    一.数组名和指针 二.数组下标是否能为负数 可以的,编译器对这块没有做要求,所以是可以的。 三. 定义数组指针 四...

  • C语言中对数组和指针sizeof求值

    C语言中对数组名sizeof(数组名)得到的是 数组的大小 (单位是字节);对 指针sizeof(指针)得到的是 ...

  • C语言的指针与数组(进阶篇之一)

    一、一维数组与指针 (1).数组指针在C语言中,数组的首地址称为数组指针。而C++规定,数组的首地址可用数组名a表...

  • C语言数组与指针关系

    前面一篇中,初步介绍了C语言的指针使用情况。这篇是对指针和数组关系的讲解。 1、数组名是数组首元素的地址 假设te...

  • c语言中数组名和指针的区别

    int a[]; a为数组首元素的地址 &a为整个数组的地址 a和&a的区别在于指针运算 a+1 -->(unsi...

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

  • 浅谈C语言数组与指针的关系

    浅谈指针定义细节及其与数组的关系 前言 翁恺老师曾经说过,指针是 C 语言的灵魂,是使 C 语言成为 “C语言” ...

  • C语言指针和数组名区别

    最近在重新学习C语言,发现在学指针的时候,写到函数就会出现各种问题,百思不得其解,而且我也不太清楚指针和数组到底是...

  • c 语言中的sizeof(数组名)和sizeof(指针)

    转载自文章[https://blog.csdn.net/Colorful_lights/article/detai...

  • 带小白学C语言指针

    C语言里指针才是C语言的开始和指针;C语言里基本所有东西都是由指针演变而成; 指针是指向地址的变量,类型就是指针...

网友评论

      本文标题:c语言数组名和指针的关系

      本文链接:https://www.haomeiwen.com/subject/kgtsmltx.html