欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 人工智能 > pytorch >内容正文

pytorch

【C语言进阶深度学习记录】二十八 数组指针与指针数组的分析

发布时间:2023/12/10 pytorch 46 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【C语言进阶深度学习记录】二十八 数组指针与指针数组的分析 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

数组指针与指针数是非常重要的概念。面试中也是经常会被问到的

文章目录

    • 1 数组的类型
      • 1.1 定义数组的类型
    • 2 数组指针
      • 2.1 数组类型和数组指针的代码分析
    • 3 指针数组
      • 3.1 指针数组代码案例分析
    • 4 总结

1 数组的类型

C语言中的数组有自己特定的类型。比如 int a[5];

数组a的类型是 int[5],并不是 int类型。

  • 数组类型是由元素类型数组大小共同决定的

1.1 定义数组的类型

在C语言中可以通过typedef 为数组的类型重命名。如下:

  • 数组的类型:

  • 数组的定义:

这种写法可能有的人没见过,等看过后面的数组指针与指针数的定义的时候就知道了。

2 数组指针

  • 数组指针是一个指针,不是数组。这个指针指向一个数组。该指针需要使用取地址符 & 向数组取地址。(数组的整个地址而非数组元素首地址)
  • 可以通过数组类型来定义数组指针:ArrayType* pointer;
  • 也可以直接定义:type(*pointer)[n];

注意:上面的pointer为数组指针变量,ArrayType是数组的类型,type是数组里面元素的类型。注意区分三者的不同。

2.1 数组类型和数组指针的代码分析

分析下面的代码32-1.c:

#include <stdio.h>/* 定义数组类型 */ typedef int(AINT5)[5]; typedef float(AFLOAT10)[10]; typedef char(ACHAR9)[9];int main(){AINT5 a1; //int a1[5];float fArray[10];AFLOAT10* pf = &fArray; //注意与float* pf = &fArray 区分ACHAR9 cArray;char(*pc)[9] = &cArray;int i = 0;printf("%d, %d\n", sizeof(AINT5), sizeof(a1));for(i=0; i<10; i++){(*pf)[i] = i; //注意数组指针的用法}for(i=0; i<10; i++){printf("%f\n", fArray[i]);}printf("%p, %p\n", &cArray, pc+1); //pc是整个数组的指针,pc+1 ==》&cArray + 9return 0; }
  • 编译运行上述代码:

分析:

  • 注意学习上面定义数组类型的方法,并使用定义的数组类型来定义数组。
  • 注意数组指针的声明与使用方法
  • 数组指针是整个数组的地址,需要使用& 号来获取
  • 代码比较简单,不多做分析

3 指针数组

  • 指针数组是一个数组,不是指针。该数组存的元素是指针。
  • 指针数组的定义: type* pArray[n];

其中 type* 是数组中存的元素的类型pArray 是数组名。如下图的指针数组:

3.1 指针数组代码案例分析

  • 代码32-2.c
#include <stdio.h> #include <string.h>#define DIM(a) (sizeof(a)/sizeof(*a))int lookup_keyword(const char* key, const char* table[], const int size){int i=0;for(i=0; i<size; i++){if(strcmp(key, table[i]) == 0){break;}}return i>=size?-1:i; } int main(){const char* keyword[] = {"do","for","if","register","return","switch","while","case","static"};printf("%d\n", lookup_keyword("return", keyword, DIM(keyword)));printf("%d\n", lookup_keyword("main", keyword, DIM(keyword)));return 0; }
  • 编译运行结果为:

4
-1

分析:

  • lookup_keyword这个函数是查找字符串数组中是否存在某一个字符串
  • table数组,就是一个指针数组,里面存的是指针。(字符串是一种常量指针)
  • 注意学会使用指针数组的使用。

4 总结

  • 数组也是有类型的:由数组的大小元素的类型共同决定的
  • 数组指针是一个指针,该指针指向对应类型的数组
  • 指针数组是一个数组,该数组中存的元素是对应类型的指针
  • 指针数组的使用与数组是一样的。但是注意指针数组在使用的时候是如何表示的。

总结

以上是生活随笔为你收集整理的【C语言进阶深度学习记录】二十八 数组指针与指针数组的分析的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。