C语言之数组,字符串,指针

一、 数组的定义

1.  数组初始化

初始化方式

  1. int a[3] = {10, 9, 6};
  2. int a[3] = {10,9};
  3. int a[] = {11, 7, 6};
  4. int a[4] = {[1]=11,[0] = 7};

2.   内存分析

  • 数组存储空间的大小
  • 存储空间的划分(内存的分配是从高地址到低地址进行的,但一个数组内部元素又是从低到高进行的)
  • 数组名的作用,查看元素地址
  • 数组越界的注意

3.      其他使用

  • 数组与函数参数
  • 数组元素作为函数参数
  • 数组作为函数参数(sizeof注意)
  • 遍历数组元素
  • 两种方式遍历(whie循环和for循环)
  • 遍历元素值和元素地址
  • 字符数组的使用

4.   二维数组

  • 一个数组能表示一个班人的年龄,如果想表示很多班呢?
  • 什么是二维数组?int ages[3][10]; 三个班,每个班10个人
  • 相当于3行10列
  • 相当于装着3个一维数组
  • 二维数组是一个特殊的一维数组:它的元素是一维数组。例如int a[2][3]可以看作由一维数组a[0]和一维数组a[1]组成,这两个一维数组都包含了3个int类型的元素

5.      初始化

  • int a[3][4] = {1,2,3,4,5,6};
  • int a[3][4] = {{},{},{}};
  • 数组元素简单访问
  • int a[][5] = {3,21,31,2,32,1};

二、字符串

1. 字符串的定义

  • 简单的字符串”itcast”
  • 一个’i’是一个字符
  • 很多个字符组合在一起就是字符串了

2.  字符串的初始化

  • char a[] = “123”;  和 char a [] = {‘1’,’2’,’3’};的区别,可以比较大小;
  • “123”其实是由’1’、’2’、’3’、’\0’组成;
  • “123”的存储分布;
  • 字符串的输出”%s”,’\0’是不会输出的。

3. \0的作用

  • 输出char a[] = {‘o’,’k’};
  • 在char a[]前面搞个”mj”
  • 输出”mj”
  • 再输出a
  • char a[] = {‘i’,’t’,’\0’,’c’};

4.      常用字符串处理函数

stren(注意中文)

三、字符串数组

1.使用场合

* 一维字符数组中存放一个字符串,比如一个名字char name[20] = "mj"

* 如果要存储多个字符串,比如一个班所有学生的名字,则需要二维字符数组,char names[15][20]可以存放15个学生的姓名(假设姓名不超过20字符)

* 如果要存储两个班的学生姓名,那么可以用三维字符数组char names[2][15][20]

2.初始化

char names[2][10] = { {‘J‘,‘a‘,‘y‘,‘\0‘}, {‘J‘,‘i‘,‘m‘,‘\0‘} };

char names2[2][10] = { {"Jay"}, {"Jim"} };

char names3[2][10] = { "Jay", "Jim" };

四、指针变量的定义

1.  定义的格式

   类名标识符  *指针变量名;

int *p;

2. 先定义后赋值

简单取值

int a = 10;

int *p;

p = &a;

printf(“%d”, *p);

简单改值

*p = 9;

3.  定义的同时赋值

int a = 10;

int *p = &a;

4.  实现修改实参

5.  注意点

int *p;   *p = 100;

int *p;  *p = &a;

%p输出指针里面存储的地址值

其他指针类型说明,比如foat *p;  char *p;

不能乱用类型,比如int a = 10;  foat *p = &a;

五、指针与数组

1.  指向一维数组元素的指针

2.  用指针遍历一维数组元素

先遍历char数组(‘i’,’t’),再遍历int类型数组

*(p+i)和*(p++)的区别

a+i和a++

p[0]、p[1]

3. 字符串回顾

char s[] = “mj”;

4. 其他定义字符串的方式

char *s = “mj”;

或者

char *s;

s = “mj”;

5.   返回字符长度

1>     编写一个int string_en(char *s),返回字符串s的字符长度

6.  返回指针的函数

指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的

返回指针的函数的一般形式为:类型名 * 函数名(参数列表)

7.  为什么指针可以指向一个函数?

函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。函数有自己的地址,那就好办了,我们的指针变量就是用来存储地址的。因此,可以利用一个指针指向一个函数。其中,函数名就代表着函数的地址。

8.   指向函数的指针的定义

定义的一般形式:函数的返回值类型 (*指针变量名)(形参1, 形参2, ...);

9.   使用注意

由于这类指针变量存储的是一个函数的入口地址,所以对它们作加减运算(比如p++)是无意义的

指向函数的指针变量主要有两个用途:

时间: 2024-08-29 19:11:49

C语言之数组,字符串,指针的相关文章

结构体指针内存——指针数组——字符串指针内存申请

前几天用的结构体,结构体内还包含有结构体指针和数组以及指向字符串的指针,发现自己对这方面的东西还很容易犯错,故现在讲其中容易出错的地方写出来,分享给大家也方便自己日后查看. typedef struct { char name[50]; char job[50]; int age; int people_id; } peopleInfo; typedef struct { bool typeAdd; bool typeDel; int length; peopleInfo *info; char

C语言关于数组与指针内容小结

数组的基本概念 什么是数组:数组就是:数组是相同类型的元素的一个集合       类型说明符 数组名 [常量表达式]: 其中,类型说明符是任一种基本数据类型或构造数据类型.数组名是用户定义的数组标识符.方括号中的常量表达式表示数据元素的个数,也称为数组的长度.例如: int a[10]; /* 说明整型数组a,有10个元素 */ float b[10], c[20]; /* 说明实型数组b,有10个元素,实型数组c,有20个元素 */ char ch[20]; /* 说明字符数组ch,有20个元

C语言中数组与指针

数组是内存空间的一片连续的区域,用于存贮一组相同数据类型元素的集合. 指针变量中存放的是变量的地址,通过指针取得地址,再通过地址提取数据. 在大多是C语言书中,都有这样的说法,“数组和指针是相同的”.其实,数组与指针,只能在特定的情况下才是相同的,在大多书情况下,他们并不相同. C语言中每个表示变量的符号都代表一个地址,而每个变量的值就是该地址里所存储的内容. 定义一个字符数组 char a[]="asdfghjkl";现在来访问第i个字符a[i],编译器符号表中具有一个符号,它代表的

C语言之数组与指针(一)

---恢复内容开始--- 数组:内存连续的,同类型元素的集合: 从最基础的数组声明,数组初始化,数组赋值,数组遍历,到二维数组,再到指针数组,数组指针,以及数组和指针关系无疑都证明了数组在c语言中的重要地位:我们将一 一对其说明. 1.数组声明:float a[size] ; int b[size]; char c[size];(size是数组元素个数,必须为正整数 : #define  size 10   ) 这样我们就声明了一个数组:但是在下面代码中我们可以看出了一个问题:没有初始化的数组中

字符 字符串 字符数组 字符串指针 指针数组

一.字符串指针.字符数组 1. 字符串指针:字符串指针变量本身是一个变量,用于存放字符串的首地址.而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以'\0'作为串的结束. char *ps="C Language"; 可以写为: char *ps;  #ps字符串指针,是指针,是一个变量, ps="C Language"; #ps为字符串的首地址,利用ps++可遍历字符串,字符串存储在以ps为开始地址的地段连续的内存空间中,并以'\0'作为字符串的结束.

C-二维数组, 字符串, 指针

常用的三种数组初始化: int arr[][4] = {{元素}, {元素},{元素},{元素}}; 二维数组本质: 每个元素是一维数组的特殊一维数组; 二维数组与函数: 1. 同一维数组一样, 当作为函数参数的时候, 函数的内部与数组对应的其实是一个指针 2. 所以在作为函数参数的时候, 需要同时传入行, 列 3. 在形参中的二维数组, 行数可以省略, 但是列数不能省略, 实参中对应的二维数组, 行数可以任意, 但是列数必须保持一致 void test(int rows, int cols,

由strcat函数引发的C语言中数组和指针问题的思考

问题一 首先,来看一下下面这段代码: #include <stdio.h> #include <string.h> int main() { char *str = "media"; char *tmp = "aaa"; printf("str: %s\n",str); strcat(str,tmp); printf("str: %s\n",str); return 0; } 代码打眼儿一看,功能很明显

深刻理解C语言:数组和指针

参考<C专家编程>的下列章节: 第4章 令人震惊的事实:数组和指针并不相同 第9章 再论数组 第10章 再论指针 数组名的理解: int a[10]; 1. a代表指向第一个数组元素的指针.做函数形参时,在表达式中时. 2. a看成一个整体.a的数据类型是int[10].因此a取地址后加一的步长为40 视频参考: 指针及指针操作 数组 高级指针.C.面向对象

c语言,数组和指针

概要: 1.普通数组与指针 2.数组指针 3.指针的数组 数组是一个由(同一类型)连续元素组成的预先分配的内存块:指针是一个对任何位置的元素的引用. 数组自动分配空间,但不能重分配或改变大小:指针必须被赋值以指向分配的空间,可以随意重新赋值. 指针可以模拟数组:几乎没有所谓数组的东西,实际是个指针操作符. 1.普通数组和指针 #include <stdio.h> int main() { int arry[10]; int *p=arry; arry[1]=100; printf("

c语言中数组,指针数组,数组指针,二维数组指针

1.数组和指针 int array[5] = {1,2,3,4,5};// 定义数组 // 1. 指针和数组的关系 int * pa = array; pa = array; // p[0] == *(p+0) == array[0] == *(array+0) printf("%p\n", pa); printf("%p\n", array); /* 访问数组两种方式 1. 下标法访问 数组名[下标] 指针[下标] 下标:偏移量 2. 指针法访问 *(p+1) *