数组是一个什么玩意:

数组和指针我的理解,有同样之处也有不同之处。因有同样之处,因此一些资料上说,数组和指针本质是同样的。因有不同之处,因此也有一些资料上说,数组和指针是不一样的。

同样之处:

数组名字和指针名字都代表了一个地址。

如:int num[10];num是数组名。函数开辟了一个存储十个整数类型的空间,而num是他们的首地址。

int *p;

p=(int *)malloc(10*sizeof(int));类似的,p也指向了首地址。

不同之处是,num[10]中的空间位置是在栈中,而 ×p指向的空间是在堆中。

p能够指向别的地址(即p能够进行指针运算。是一个变量)可是num不能够运算,是一个常量。

一维数组与指针数组:

int num[5]={1,2,3,4,5};

引用的时候:printf("%d",num[i]);

int *num2[5]={&n1,&n2,&n3,&n4,&n5};

引用的时候:printf("%d",*num[i]);

二维数组:

int num[i][j];





能够用malloc创建数组:

int *pv=(int *)malloc (5*sizeof(int));

for(i=0;i<5;i++)

p[i]=i+1;//*(p+i)=i+1;

指针的一维数组:

int *arr[5];

int i;

for(i=0;i<5;i++)

{

    arr[i]=(int *)malloc(sizeof(int));

    *arr[i]=i;

}

或者:

*(arr+i)=(int *)malloc(sizeof(int));

**(arr+i)=i;

另外一种分析: (arr+i)表示数组第i个元素的地址。我们须要改动这个地址中的内容,因此用了×(arr+i)而 arr+i的内容是一个指针,指向一个内存。因此再此解引。返回的是所分配内存的位置。

二维数组的传递:

以2.c为样例。尽管是二维数组,可是 在函数中,是以一维数组来使用的。由于声明中就是一维数组。所以在子函数中无法以arr[i][j]的方式来使用数组里的内容。仅仅能用

arr+偏移量 然后解引的方式: *(arr+(i*cols)+j)

也能够动态分配二维数组:

int rows2;

int columns=5;

int **matrix=(int **)malloc(rows*sizeof(int *));//类型是二维数组。里面的每个元素是一个整形指针。

for(i=0;i<rows;i++)

{

    matrix[i]=(int *)malloc(colums*sizeof(int));//每个元素都指向一个整形一维数组。

}

该方式类似于參考 字符串指针的表示方式。

代码演示样例:

1//指针数组:

#include <stdio.h>

int main(void)

{

    int* num1[3];

    int num2[3]={1,2,3};

    int i;

    for(i=0;i<3;i++)

num1[i]=&num2[i];

    for(i=0;i<3;i++)

printf("%4d",*num1[i]);

    putchar('\n');

    return 0;

}

2/二维数组的表示:

#include <stdio.h>

void arr_initial(int *arr,int rows,int cols)

{

    int i,j;

    int num=1;

for(i=0;i<rows;i++)

  for(j=0;j<cols;j++)

  {

     *( arr+(i*cols)+j)=num++;

  }

}

void arr_print(int *arr,int rows,int cols)

{

    int i,j;

    int num=1;

for(i=0;i<rows;i++)

{for(j=0;j<cols;j++)

  {

     printf("%4d",*( arr+(i*cols)+j));

  }

  putchar('\n');

}

}





int main(void)

{

    int num1[5][6];

    int num2[7][8];

    arr_initial(&num1[0][0],5,6);

    arr_print(&num1[0][0],5,6);

    arr_initial(&num2[0][0],7,8);

    arr_print(&num2[0][0],7,8);

    return 0;

}

最新文章

  1. 在Thinkphp中使用AJAX实现无刷新分页
  2. c中的函数
  3. python 输出乱码
  4. 【Unity3D游戏开发】Application.systemLanguage无法区分简体中文和繁体中文 (二六)
  5. K2上海总部技术培训分享笔记
  6. 搭建EF6.0+MVC4搭建框架遇到的问题及解决方案
  7. linux驱动系列之arm汇编
  8. (转)PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
  9. android环境下两种md5加密方式
  10. css 优先级
  11. ASP.NET路由
  12. PAT (Advanced Level) 1020. Tree Traversals (25)
  13. 一些常用的vim编辑器快捷键:
  14. HashiCorp Vault介绍
  15. glusterfs 4.0.1 rpc 分析笔记2 (socket.so 模块)
  16. 多线程-Callable、Future、FutureTask
  17. 上海市2019年公务员录用考试第一轮首批面试名单(A类)
  18. 用户场景模拟+Spec
  19. 每日英语:Can Robots Better Spot Terrorists at Airports?
  20. 【CentOS 7】nginx配置web服务器

热门文章

  1. DevExpress ASP.NET 使用经验谈(1)-XPO模型的创建
  2. DEV中gridview常用属性的设置
  3. 创建Xml的将但方法和向Xml中添加数据
  4. .net 基础错误-string.replace 方法
  5. photoshop自动切图
  6. 浅谈RFID电子标签封装技术
  7. 完成端口(Completion Port)详解(超级长,超级清楚)
  8. 分析php获取客户端ip
  9. Jmeter接口測试
  10. 关于css里的class和id