一级指针,二级指针,指针数组,数组和指针

  • 指针和数组
    指针是个用来存放地址的变量;
    &arr表示整个数组;
    arr数组名表示首元素的地址;
    指针解引用即表示指针所指向的内容
    比如:char ptr="abcdef";
    ptr; //指针解引用即表示它所指向的内容,即abcdef
    ptr; //ptr里保存的是字符串的地址
    2.一级指针
    一级指针就是指指针,里面放的就是元素的地址,我们可以通过访问元素的地址来找到该地址里存放的内容,即元素本身。
    比如:char str1[ ]={1,2,3,4,5,6,7};
    3.二级指针
    二级指针就是指向一级指针的指针,里面保存的是一级指针变量的内存地址
    比如:int a=10;
    int
    pa=&a;
    int *ppa=&pa;//表示a的地址存放在pa中,pa的地址存放在ppa中,pa是一 //级指针,ppa是二级指针.
    4.指针数组
    首先,指针数组是一个数组,数组的元素每一个都是指针类型,这里的指针是用来修饰数组的,在32位平台下,指针占4个字节的大小。
    比如:char
    arr[4]={"hello","world"};//这里的arr是一个指针数组,它里面有两个元素,每个元素都是一个指针类型。
    那么,如何判别一个数组是否是指针数组呢?
    最好的方法就是加上(),比如:char(arr[4]);其次我们可以也根据符号和[ ]
    的优先级来确定其结合性。
  • 原文地址:https://blog.51cto.com/14234314/2402484

    时间: 2024-09-30 19:14:38

    一级指针,二级指针,指针数组,数组和指针的相关文章

    c语言中如何通过二级指针来操作二维数组

    通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上.之后就可以通过二维指针直接访问了. 参考代码如下,可以看具体注释辅助理解. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <stdio.h>//输入输出头文件. #include <stdlib.h>//本程序需要用到malloc/free函数,引

    指针数组&amp;数组指针

    二维数组: 1)定义形如int a[2][3],此时a代表的是这个二维数组的地址,sizeof(a)为24. 二级指针: 1)定义形如int **p:表示为指向指针的指针 2)二级指针不能和二维数组替换,如int aa[2][3],**a;a=aa;是错误的,但可以用int (*a)[3]:a=aa替换. 指针数组: 1)定义形如int *p[5]:表示含有五个指针元素的数组.又称为二维指针,可以和p[5][n]在一定情况下通用,sizeof(p)为20. 2)每个元素均是指针.如p[0].p[

    字符数组VS字符指针

    最近复习数据结构实验时,碰到这么一行代码,看的有点不爽. typedef char** HuffmanCode; 借此梳理下数组和指针. int* p; //指针变量p中存的地址代表的内存单元中的数据是整型 在32位平台下,由于p存的是地址,故p的值是32位. 不论p指向什么类型的数据,指针变量p本身都是整型. c中没有string类型,所以一般用字符数组表示字符串. char str[15] = "Hello World"; c规定数组名表示数组在内存中的首地址,就是str = &a

    C++数组指针、指针数组、函数指针的核心概念

    1.什么叫数组指针? 数组指针:一个指向一维或者多维数组的指针. 比如:int * b=new int[10];指向一维数组的指针b ; 注意,这个时候释放空间一定要delete [] ,否则会造成内存泄露,b 就成为了空悬指针.         int (*b2)[10]=new int[10][10]; 注意,这里的b2指向了一个二维int型数组的首地址.         注意:在这里,b2等效于二维数组名,但没有指出其边界,即最高维的元素数量,但是它的最低维数的元素数量必须要指定!就像指向

    8.31 二维数组 字符串和指针

    指针+1移动了相当于所指向类型的大小的字节 int *s1[100] 移动了4个字节 int (*s2)[100] 移动了400个字节 char *s3 移动了1 个字节 int *s4 移动了4个字节 ***p2如何理解? int *p0 = &i *p0  = i int **p1 = &p0 **p1 = i int ***p2 = &p1 ***p2 = i *p2 = p1的值 **p2 = p0的值 ***p2 = i的值 所以***p2就是p0的值        而p

    指针数组 数组指针

    指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针 数组指针:a pointer to an array,即指向数组的指针 还要注意的是他们用法的区别,下面举例说明. int* a[4]     指针数组 表示:数组a中的元素都为int型指针 元素表示:*a[i]   *(a[i])是一样的,因为[]优先级高于* int (*a)[4]   数组指针 表示:指向数组a的指针 元素表示:(*a)[i] 注意:在实际应用中,对于指针数组,我们经常这样使用: 1

    数组指针、指针数组、函数指针、指针函数 -----笔记

    1.数组的四种访问方式 定义数组 a[]; 指针 *p 指向数组a; (1) 利用数组的下表进行访问 a[i]; (2) 数组名+地址的偏移量i *(a+i) (3) 利用指针 p 进行下表访问 p[i] (4) 指针p + 地址的偏移量i *(p+i) 一维数组数组名:相当于一个单指针 2. 数组指针(指针)     指针数组(数组) 函数指针(指针)     指针函数(函数)    -------->只看后边两个字就能够区分是指针还是数组或函数 _______________________

    利用指针地址偏移打印一维数组

    // //  main.c //  利用指针地址偏移打印一维数组 // // Created by wanghy on 15/7/24. // Copyright (c) 2015年 wanghy. All rights reserved. // #include <stdio.h> #define len 10 int main(int argc, const char * argv[]){ //定义一个存放  int 类型元素的一维数组. int arry[]={1,2,3,4,5,6,7

    【C语言】12-指向一维数组元素的指针

    一.用指针指向一维数组的元素 1 // 定义一个int类型的数组 2 int a[2]; 3 4 // 定义一个int类型的指针 5 int *p; 6 7 // 让指针指向数组的第0个元素 8 p = &a[0]; 9 10 // 修改所指向元素的值 11 *p = 10; 12 13 // 打印第一个元素的值 14 printf("a[0] = %d", a[0]); 输出结果:,说明已经通过指针间接修改了数组元素的值,跟指向一个普通int类型变量是一样的. 由于数组名代表

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

    一.关于二维数组和二维数组区别 (1)一维数组在内存中是连续分布存储的,同样,二维数组也是在内存连续存储的.所以从内存的角度来分析,一维数组和二维数组其实没有本质区别. (2) 二维数组可以使用一维数组来代替.但是在实际的应用中,有时候使用二维数组会更加直观,方便程序的编程. (3)两者在内存使用效率上是一模一样的. 二.二维数组的第一维和第二维概念 (1)例如 int a[2][5]中,前面的2表示第一维:后面的5表示第二维 (2) 二维数组的第一维表示最外部的那一层,第一维本身也是一个数组,