C语言之一维数组与指针

一维数组:

假如有一维数组如下:

char a[3];

该数组有3个元素,数据类型为char型,地址空间如下。

如果想访问数据,直接使用a[0]、a[1]、a[2]取出相应地址空间的值即可

一级指针:

指针即地址,char *b即定义一个指向char型数据的指针,int *b即定义一个指向int型数据的指针。

int a=5;
int *b=&a;

例子解析:定义一个int型数据a,值为5,定义一个指向int型的指针b,b的值为a的地址。使用*b就是b指向地址的值。地址空间如下。

二级指针:

二级指针即指向指针的指针,

int a=5;
int *b=&a;
int **c=&b;

例子解析:定义一个int型数据a,值为5,定义一个指向int型的指针b,b的值为a的地址。使用*b就是b指向地址的值。定义一个指向指针的指针c,c的值为b的地址,*c就是b的值,也就是a的地址,**c就是a的值,地址空间如下。

一维数组与指针

数组其实就是一段连续空间的数据,指针可以随意指向某个地址,再读取该地址的值。

int a[3];
int *b=a;
int *c=&a; //错误int (*c)[3]=&a; //正确
int *d=&a[0];
int *e=&a[1];
int *f=&a[2];

例子解析:

1. 定义一维数组a[3],在例子中,a、&a、&a[0]的值虽然都是一样,但是意义不一样。a代表a[3]这个数组,也是a[3]的起始地址。&a就是取a[3]的起始地址。&a[0]就是取数组第一个元素的地址。

2. 例子中,使用int *c=&a是错误的,因为a的数据类型是int (*)[3],而不是int *,所以必须以int (*c)[3]=&a。

3.定义了int (*c)[3]=&a,可以使用(*c)[0]取得a[0],(*c)[1]取得a[1],(*c)[2]取得a[2]。

原文地址:https://www.cnblogs.com/hwli/p/10744237.html

时间: 2024-10-12 04:37:09

C语言之一维数组与指针的相关文章

C语言 二维数组与指针笔记

今天分析了C语言二维数组和指针的基本理解,感觉有点懵...代码记录一下,如果有大神临幸发现哪里有误,欢迎指正~~~ #include <stdio.h> #include <stdlib.h> #include <string.h> //void func(int p[][]) //这样写等同于void func(int **p) p++移动了四个字节,(*p)++移动了四个字节,不符合二维数组规律 //{ //} //列优先输出的函数(即竖着输出) void func

C语言核心之数组和指针详解

寒假要开始猛刷<剑指offer>,先回顾一下C语言基础做个热身. 指针 相信大家对下面的代码不陌生: 1 int i=2; 2 int *p; 3 p=&i; 这是最简单的指针应用,也是最基本的用法.再来熟悉一下什么是指针:首先指针是一个变量,它保存的并不是平常的数据,而是变量的地址.如上代码,指针p中保存的是整型变量i的地址信息. 接下来看如何定义一个指针,既然指针也是一个变量,那么它的定义也和其它变量一样定义:如: int *p: .'*' 是间接寻址或间接引用运算符.上例中我们还

c语言操作一维数组-3

C语言选择题#includemain(){double a[15],k;k=fun(a);} 则以下选项中错误的fun函数首部是 ( D)A.double fun(double a[15]) B.double fun(double *a)C.double fun(double a[]) D.double fun(double a)------------------------------------------------ http://blog.csdn.net/jin13277480598

15-黑马程序员------C 语言学习笔记---数组和指针

黑马程序员------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 四 数组和指针 01 数组名代表数组在内存中的首地址,表示的是地址信息,因此数组名可以理解为一个指针,不过数组名是一个常量,不能改变. #include <stdio.h> int main() { char nam

C语言学习_数组与指针2

数组其实是一种变相的指针,数组名同时也是指针,eg: CODE == &CODE[0]; 数组的加法: #include<stdio.h> #define SIZE 4 int main(void) { shortdates[SIZE]; short* pti; shortindex; doublebills[SIZE]; double* ptf; pti= dates;//把数组地址付给指针 ptf= bills; printf("%23s  %10s\n", &

C语言之不规则数组和指针

不规则数组是每一行的列数不一样的二维数组. 在了解不规则数组之前,先了解一下用复合字面量创建的二维数组.复合字面量是一种C构造,前面看起来像是类型转换操作,后面跟的是花括号括起来的初始化列表. (const int) {100} (int[3]) {1,2,3} 下面的声明把数组声明为整数指针的数组,然后用复合字面量语句块进行初始化,由此创建了数组arr. int (*(arr[])) = { (int[]) {0,1,2}, (int[]) {3,4,5}, (int[]) {6,7,8}};

C语言 二维数组(指针)动态分配和释放(转)

C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按照16位.32位.64位为单位进行编辑的话:旧的16位处理器,比如Intel 80286 CPU需要8个指令,32位的处理器需要4个指令,而64位处理器则只要两个指令,显然,在工作频率相同的情况下,64位处理器的处理速度会比16位.32位的更快.而且除了运算能力之外,与32位处理器相比,64位处理器

c语言二位数组与指针

问题,以下输出的结果是什么,区别在于哪? void main() { int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; //输出的3个地址都一样,差别在哪? printf("\n%x",a); printf("\n%x",*a); printf("\n%x",&a); system("pause"); } 像我这种野生码农看到这个问题基本懵了,好吧我们先通过一维数组来理解. v

C语言学习004:数组与指针

在C语言中,字符串实际上就是字符数组,在内存中字符串"Shatner"存储的形式是这样的 由于C语言并不知道数组有多长,所以用"\0"表示字符串的结束位置,通过sizeof运算符可以取到字符串在内存中占用多少个字节 同样的字符串在下面的代码中获取的长度却不一样,你知道是什么原因么? #include <stdio.h> void SayHello(char msg[]){ printf("msg occupies: %i\n",siz