【好程序员笔记分享】——数组与指针

ios培训 ------我的c语言笔记,期待与您交流!

前面我们介绍了关于C语言的内存分配问题,下面我们就开始介绍关于C语言的两个非常重要的知识点:数组与指针

数组与指针其实不仅仅是再C语言中,再OC中(当然OC是内部已经帮我们处理好了,但是还有存在大量的指针),C#中,C++中等待一些开发中都是非常常见的,所以作为一个程序员是必须掌握的。

一、数组:相同类型的集合

1:一维数组

平时我们都是申明一个变量,那么如果变量很多我们要怎么做呢,这个时候我们就能用到数组,那么什么是数组呢?

首先来看一个实例:

#include<stdio.h>

int main(void)

{

  int a [20];

  这里我们称a为为20个元素的数组;每个元素都是你听类型,当然你也可以申明成其他类型(注意哦:这里是一次性申明的)

  其中[]里面的数字表示下表:a[0]。。。。a[19]

  return 0;

}

数组就是数据的整合。

    比如整型数组的定义的格式如下:

int 变量名[元素个数];

例:int a[10]; 接着就是数据是怎么存放到整型数组中的,数组的存放有一下几种方式:

  • 在定义的时候赋值      int a[5]={0,1,2,3}
  • 在定义时时候对单赋值      int b[9]={[4]=5,[7]=2};
  • 在定义时时候不赋值         int c[6];   a[2]=1; a[3]=4;

既然数据可以存放多个数据,它在内存中是这么存放的:

注:数组不能整理赋值:如a = b;
  
下面给大家看一个实例:

int main()
{
    char cs[5]={‘1‘,‘2‘,‘3‘,‘4‘,‘5‘};

return 0;
}

注:内存给数组分配也是从大到小根据占据字节分配,依次的从上到下存放数据,并且cs的地址就是它的首地址即cs[0],和存储变量的方式很雷同,只不过没有转换成二进制。

2:二维数组

  其实:在存储数据如果使用数组,难免有些不足,那么就有了二维数组,二维数是数组的数组,或者把它看成两个一维数组。

        二维数组可以存放的数据比一维数组要多的多,实际上就是两个一维数,数组的输入和输出方式可以用for循环来实现:

3:数组中的sizeof和strlen介绍

sizeof:求所占字节数需要算上‘\0‘

   strlen:是单纯求字符串的长度,需要加头文件string.h

下面看一个实例:

看下面代码

int i,a[]={3,4,5,6,7,3,7,4,4,6};
for (i=0;i<=9;i++)
{
  printf ( “%d”, a[i] );
}

很显然,它是显示a 数组的各元素值。

我们还可以这样访问元素,如下

int i,a[]={3,4,5,6,7,3,7,4,4,6};
for (i=0;i<=9;i++)
{
  printf ( “%d”,  *(a+i) );
}

它的结果和作用完全一样

二、指针:(是一个变量)

指针是一个8字节的变量,

#include<stdio.h>

int main(void)

{

int a;

int *p = &a;//取地址符,把吖的地址放到p里面!

printf("%ld\n", sizeof(o),sizeof(int *));

return 0;

}

   C语言的核心就是指针,指针可以操作内存,间接性的修改内存里的数据。

  指针类型:

  1.     有数组指针,
  2.     字符指针,
  3.     字符串指针,
  4.     指针的指针,
  5.     函数的指 针,
  6.     结构体的指针
  7.     。。。

1. 数组指针,顾名思义就是定义一个指针,指针里存放的值就是数组的地址。

}

2.字符指针就是单个字符的指针,比较关注的还是字符串指针,也就是字符数组指针,但是在定义时完全可以用指针去代替,例如:

char *name="minglei";    //字符串常量

一般的定义是:

char name[10];           //字符串变量

char *n=name;

我们定义一个指针指向指针的指针;

  • int a=5;         变量a的数据类型为int
  • int *p=a;        指针p的数据类型为int *
  • int **pp=p;      指针pp的数据类型为int **

只要记住(数据类型 *)是一体的就很容易理解了。

3. 数组名与指针变量的区别

请看下面的代码:

int i,*pa,a[]={3,4,5,6,7,3,7,4,4,6};
  pa =a;
  for (i=0;i<=9;i++)
  {
    printf ( “%d”, *pa );
    pa++ ;  //注意这里,指针值被修改
  }

可 以看出,这段代码也是将数组各元素值输出。不过,你把{}中的pa改成a试试。你会发现程序编译 出错,不能成功。看来指针和数组名还是不同的。其实上面的指针是指针变量,而数组名只是一个指针 常量。这个代码与上面的代码不同的是,指针pa在整个循环中,其值是不断递增的,即指针值被修改了 。数组名是指针常量,其值是不能修改的,因此不能类似这样操作:a++.前面4,5节中pa[i],*(pa+i )处,指针pa的值是使终没有改变。所以变量指针pa与数组名a可以互换。

注:指针还可以进行加减运算

将数组与指针结合使用:

指针数组
  一个指针数组是指一个数组中的每个元素都是一个指针,例如:

int *p[10];//而不能是int (*p)[10]

或者

char *p[10];

此时p是一个指针(数值上和&p[0]一样);
在前面有int t[10];

int * pt=t;//使用pt指向t

那么这里我们用什么指向int *t[10]中的t呢?我们要使用一个指针的指针:

int **pt=t;

  这是因为:在int *t[10]中,每个元素是指针,那么同时t又指向这个数组,数组上和&t[0]相同,也就是指向t[0],指向一个指针变量,可以说是一个指针的指针了,所以自然要用

int **pt;

同样这里我以一个图弄清楚数组与指针:

如果你能看懂这个(结果是什么?),那么你就把数组与指针基本上入门了,记住知识入门哦!

时间: 2024-10-05 05:06:09

【好程序员笔记分享】——数组与指针的相关文章

【好程序员笔记分享】——常用关键字的使用与区别

iOS培训------我的c语言笔记,期待与您交流! copy,assign,strong,retain,weak,readonly,readwrite,nonatomic,atomic,unsafe_unretained的使用与区别 最近在学习iOS的过程个遇到了不少问题,知道概念也看过示例代码,但是就是写不出来或者不知道怎么去用. 一种遇到最多的时候就是在申明一个属性的时候,比如: @property (?, ?) ? *!: 对,就是这里,每次碰到这里的时候,就不知道怎么下手了,虽然看起来

【好程序员笔记分享】——动态内存分析

ios培训------我的c语言笔记,期待与您交流! 再C语言中关于内存是一个很重要的知识点,所以今天我就从c语言的内存分配开始为大家解析一下C语言再iOS开发中非常重要的一些知识. 1:malloc函数的介绍 C语言中开辟内存空间:malloc函数 再C语言中malloc原理大致是这样的: malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表.调用malloc函数时,它沿连接表寻找一个大到足以满足用 户请求所需要的内存块.然后,将该内存块一分为二(一块的大小与

【好程序员笔记分享】——动态内存分配

<A href="http://www.goodprogrammer.org/" target="blank">ios培训</A>------我的c语言笔记,期待与您交流! 再C语言中关于内存是一个很重要的知识点,所以今天我就从c语言的内存分配开始为大家解析一下C语言再iOS开发中非常重要的一些知识. 1:malloc函数的介绍 C语言中开辟内存空间:malloc函数 再C语言中malloc原理大致是这样的: malloc函数的实质体现在,它

【好程序员笔记分享】——纯代码退出键盘

iOS培训------我的c语言笔记,期待与您交流! 关于iOS开发中键盘的退出,其实方法有很多中,而且笔者也也学会了不少,包括各种非纯代码界面的退出. 但是最近开始着手项目的时候却闷了,因为太多了,笔者确实知道有很多中方法能实现,而且令我影响最深的就是 EndEditing,但是因为即有textView,又有TextField而且他们各有不同的方法,虽然笔者现在搞懂了,但是不知道什么时候又不记得 了,而且虽然感觉很简单现在感觉很简单的样子,但是对于没有真正弄清楚的人来说,也是一件痛苦的事情,哈

【好程序员笔记分享】——预处理

iOS培训------我的c语言笔记,期待与您交流! 其实在C语言的远行过程中,有这样一个流程, 编译:C----〉可执行文件(可以运行的) 1:.C------.i 预处理(之前和之后还是C语法)2: .i-------.s 编译(之前是C语法,之后是汇编语法)3: .s------.o 汇编4: .o------可执行程序 链接 下面我们就来说说一说第一个步骤预处理阶段: 一:预处理介绍 预处理:单纯的宏的替换 宏:发生在预处理阶段的单纯的字符串的替换 C语言提供了多种预处理功能,如宏定义.

【好程序员笔记分享】——iOS开发之纯代码键盘退出

-iOS培训,iOS学习-------型技术博客.期待与您交流!------------ iOS开发之纯代码键盘退出(非常简单)     iOS开发之纯代码键盘退出 前面说到了好几次关于键盘退出的,但是最近开始着手项目的时候却闷了,因为太多了,笔者确实知道有很多中方法能实现,而且令我影响最深的就是 EndEditing,但是因为即有textView,又有TextField而且他们各有不同的方法,虽然笔者现在搞懂了,但是不知道什么时候又不记得 了,而且虽然感觉很简单现在感觉很简单的样子,但是对于没

【好程序员笔记分享】——Xcode基本操作

iOS培训------我的c语言笔记,期待与您交流! 所谓一个开发者,关于开放上面的技术不懂,哪都不算什么,因为还没有学到那么精通的程度,但是如果一个开发者连自己开发所用的工具都不太熟练,甚至不会操作那么一切都是废话,还是别做这个,回家睡大觉吧. 今天小编就根据自己从开始学习C(ios)到现在这么久遇到了最常用的开发工具的常用操作和一些常用快捷键. 相信看完之后你的编码和开发效率会快很多,不信你可以试试! 一.快捷键的使用 经常用到的快捷键如下: 新建 shift + cmd + n     新

【好程序员笔记分享】——C语言之结构体与枚举

iOS培训——我的c语言笔记,期待与您交流! 一:结构体与枚举的介绍: 结构体与枚举:是一种存储复杂的数据结构体:是用户自定义的一种类型,不同类型的集合,而数组是相同类型变量的集合. 二:结构体的创建 struct user { char username[20]; int score; } 这里两种不同类型的属性的结构体. 创建结构体,就是创建一个类型,计算机并没有分配内存空间. 三:结构体的调用 struct user u1; 这里就是对结构体的调用,这个时候计算机才会为其分配内存空间. u

【好程序员笔记分享】——函数解析

iOS培训——我的c语言笔记,期待与您交流! 关于函数,作为一个开发者事必须掌握的知识不管你在那一个领域,所以今天我就来说一说函数. 一:函数的介绍 关于函数,其实笔者在前面都已经演示不少了,其中用的最多的就是main函数,虽然直接说函数可能不太了解但是,说到main函数,只要你认真看一下main函数的结构,那么你堆函数就大致知道事怎么回事了. 函数:将一些繁琐,反复使用的代码封装在一起,以后你要使用的时候就只要调用这个函数. 其实C程序的全部工作都是由函数完成的,所以C语言也称为函数式语言.