精华内容
下载资源
问答
  • 维数组与指针、指针数组、数组指针的用法

    万次阅读 多人点赞 2018-03-12 18:16:20
    二维数组和指针⑴ 用指针表示二维数组元素。要用指针处理二维数组,首先要...而每个大数组元素对应二维数组一行,我们就称之为行数组元素,显然每个行数组元素都是一个一维数组下面我们讨论指针和二维数组元素...

    二维数组和指针⑴ 用指针表示二维数组元素。
    要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。我们知道,一个二维数组在计算机中存储时,是按照先行后列的顺序依次存储的,当把每一行看作一个整体,即视为一个大的数组元素时,这个存储的二维数组也就变成了一个一维数组了。而每个大数组元素对应二维数组的一行,我们就称之为行数组元素,显然每个行数组元素都是一个一维数组

    下面我们讨论指针和二维数组元素的对应关系,清楚了二者之间的关系,就能用指针处理二维数组了。
    设p是指向二维数组a[m][n]的指针变量,则有:

    int* p=a[0];//此时P是指向一维数组的指针。P++后,p指向 a[0][1]。

    如果定义int (*p1)[n];p1=a;p1++后,p1指向a[1][0];  

    则p+j将指向a[0]数组中的元素a[0][j]。
    由于a[0]、a[1]┅a[M-1]等各个行数组依次连续存储,则对于a数组中的任一元素a[i][j],指针的一般形式如下:
    p+i*N+j             相应的如果用p1来表示,则为*(p1+i)+j
    元素a[i][j]相应的指针表示为:
    *( p+i*N+j)        相应的如果用p1来表示,则为*(*(p1+i)+j)
    同样,a[i][j]也可使用指针下标法表示,如下:
    p[i*N+j]
    例如,有如下定义:
    int a[3][4]={{10,20,30,40,},{50,60,70,80},{90,91,92,93}};
    则数组a有3个元素,分别为a[0]、a[1]、a[2]。而每个元素都是一个一维数组,各包含4个元素,如a[1]的4个元素是a[1][0]、a[1][1]、a[1]2]、a[1][3]。
    若有:
    int *p=a[0];
    则数组a的元素a[1][2]对应的指针为:p+1*4+2
    元素a[1][2]也就可以表示为:*( p+1*4+2)
    用下标表示法,a[1][2]表示为:p[1*4+2]
    特别说明:
    对上述二维数组a,虽然a[0]、a都是数组首地址,但二者指向的对象不同,a[0]是一维数组的名字,它指向的是a[0]数组的首元素,对其进行“*”运算,得到的是一个数组元素值,即a[0]数组首元素值,因此,*a[0]与a[0][0]是同一个值;而a是一个二维数组的名字,它指向的是它所属元素的首元素,它的每一个元素都是一个行数组,因此,它的指针移动单位是“行”,所以a+i指向的是第i个行数组,即指向a[i]。对a进行“*”运算,得到的是一维数组a[0]的首地址,即*a与a[0]是同一个值。当用int *p;定义指针p时,p的指向是一个int型数据,而不是一个地址,因此,用a[0]对p赋值是正确的,而用a对p赋值是错误的。这一点请读者务必注意。
    ⑵ 用二维数组名作地址表示数组元素。
    另外,由上述说明,我们还可以得到二维数组元素的一种表示方法:
    对于二维数组a,其a[0]数组由a指向,a[1]数组则由a+1指向,a[2]数组由a+2指向,以此类推。因此,*a与a[0]等价、*(a+1)与a[1]等价、*(a+2)与a[2]等价,┅,即对于a[i]数组,由*(a+i)指向。由此,对于数组元素a[i][j],用数组名a的表示形式为:
    *(*(a+i)+j)
    指向该元素的指针为:
    *(a+i)+j

    数组名虽然是数组的地址,但它和指向数组的指针变量不完全相同。

    第一,指针变量的值可以改变,即它可以随时指向不同的数组或同类型变量,而数组名自它定义时起就确定下来,不能通过赋值的方式使该数组名指向另外一个数组。

    第二,数组名是指针,类型是指向元素类型的指针,但值是指针常量,声明数组时编译器会为声明所指定的元素数量保留内存空间。数组指针是指向数组的指针,声明指针变量时编译器只为指针本身保留内存空间。

    例4 求二维数组元素的最大值。


    该问题只需对数组元素遍历,即可求解。因此,可以通过顺序移动数组指针的方法实现。
    main()
    {
    int a[3][4]={{3,17,8,11},{66,7,8,19},{12,88,7,16}};
    int *p,max;
    for(p=a[0],max=*p;p<a[0]+12;p++)
       if(*p>max)
          max=*p;
    printf("MAX=%d/n",max);
    }
    执行结果:
    MAX=88
    这个程序的主要算法都是在for语句中实现的:p是一个int型指针变量;p=a[0]是置数组的首元素地址为指针初值;max=*p将数组的首元素值a[0][0]作为最大值初值;p<a[0]+12是将指针的变化范围限制在12个元素的位置内;p++使得每比较一个元素后,指针后移一个元素位置。
    例5 求二维数组元素的最大值,并确定最大值元素所在的行和列。
    本例较之上例有更进一步的要求,需要在比较的过程中,把较大值元素的位置记录下来,显然仅用上述指针移动方法是不行的,需要使用能提供行列数据的指针表示方法。
    main()
    {
    int a[3][4]={{3,17,8,11},{66,7,8,19},{12,88,7,16}};
    int *p=a[0],max,i,j,row,col;
    max=a[0][0];
    row=col=0;
    for(i=0;i<3;i++)
       for(j=0;j<4;j++)
         if(*(p+i*4+j)>max)
          {
            max=*(p+i*4+j);
            row=i;
            col=j;
          }
    printf("a[%d][%d]=%d/n",row,col,max);
    }
    程序运行结果:
    a[2][1]=88
    ⑶ 行数组指针
    在上面的说明中我们已经知道,二维数组名是指向行的,它不能对如下说明的指针变量p直接赋值:
    int a[3][4]={{10,11,12,13},{20,21,22,23},{30,31,32,33}},*p;
    其原因就是p与a的对象性质不同,或者说二者不是同一级指针。C语言可以通过定义行数组指针的方法,使得一个指针变量与二维数组名具有相同的性质。行数组指针的定义方法如下:
    数据类型 (*指针变量名)[二维数组列数];
    例如,对上述a数组,行数组指针定义如下:
    int (*p)[4];
    它表示,数组*p有4个int型元素,分别为(*p)[0]、(*p)[1]、(*p)[2]、(*p)[3] ,亦即p指向的是有4个int型元素的一维数组,即p为行指针

    此时,可用如下方式对指针p赋值:

    p=a;

    (4)指针数组的定义

    指针数组是指每个元素中存放的是指针。定义为 int *p[4];sizeof(p)=16,返回的是数组的总空间

    展开全文
  • 指针数组与数组指针的用法 1、定义方式 int *parr[3]; //指针数组,存放三个整形指针的数组 int(*p)[4] = NULL;//数组指针,指向含有4个整形元素的数组 2、使用 为整形二维数组分配空间并赋值打印. 做法:先定义个...

    指针数组与数组指针的用法
    1、定义方式
    int *parr[3]; //指针数组,存放三个整形指针的数组
    int(*p)[4] = NULL;//数组指针,指向含有4个整形元素的数组
    2、使用
    为整形二维数组分配空间并赋值打印.
    做法:先定义一个指针数组,再把指向一维数组的指针放进指针数组。
    void test1()
    {
    int cnt = 0;
    int arr1[3][4] = { 0 };
    int *parr[3]; //指针数组,存放三个整形指针的数组
    int(*p)[4] = NULL;//数组指针,指向含有4个整形元素的数组
    //int *p = NULL;
    for (int i = 0; i < 3; i++)
    {
    p = (int *)malloc(sizeof(int) * 4);
    parr[i] = p;
    for (int j = 0; j < 4; j++)
    {
    parr[i][j] = cnt++;
    }
    }
    for (int i = 0; i < 3; i++)
    {
    for (int j = 0; j < 4; j++)
    {
    printf_s("%d ", *(*(parr + i) + j));
    }
    }
    }
    打印结果:0 1 2 3 4 5 6 7 8 9 10 11

    展开全文
  • C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.comC语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 本文由 arthinking 发表于315 天前 ⁄ ...

    C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表
    本文由 arthinking 发表于315 天前 ⁄ itzhai.com原创文章 ⁄ C语言评论数 3 ⁄ 被围观 1,775 views+
     

     

    指针数组:
    在一个数组中,如果它的元素全部都是指针类型的数据,那么这个数组称为指针数组。

    定义:类型名 *数组名[数组长度];

    char *suit[3] = {"first","second","third"};
    指向指针的指针:

    如果一个变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针数据的指针变量,又称多级指针,简称为指向指针的指针。

    定义:类型标识符 * * 指针变量名;

    利用指针变量访问另一个变量就是“间接访问”,在一个指针变量中存放一个目标变量的地址,就是“单级间址”。

    对于数组suit,由于数组名本身就表示地址,所以可以直接创建二级指针:

    char **p;
    p = suit;
    #include<stdio.h>
    void main(){
    	int a[5] = {1,3,5,7,9};
    	int *num[5],i;
    	int **p;
    	for(i=0;i<5;i++){
    		num[i] = &a[i];
    	}
    	p = num;
    	for(i=0;i<5;i++){
    		printf("%d",**p);
    		p++;
    	}
    	printf("\n");
    }
    指向二维数组的指针:



    二维数组的地址:

    a=a[0][0]=a[0] a+1=a[1] a[0]+1=a[0][1]

    a是行指针,*a是列指针,**a表示a[0][0]的值,*a表示a[0]的地址。 a[1]+2 等价于 *(a+1)+2

    在行指针前面加上一个*就转换为了列指针,若a和a+1是行指针,则*a和*(a+1)是列指针。



    指向数组元素的指针变量

    #include<stdio.h>
    void main(){
    	int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}
    	int *p;
    	for(p = a[0]; p<a[0]+12; p++){
    		if((p-a[0])%4 == 0)
    			printf("\n");
    		printf("%4d",*p);
    	}
    }
    指向由m个元素构成的一维数组的指针变量

    这种指针使得p+1不是指向a[0][1],而是指向a[1],p的增值以一位数组的长度为单位,这种指针称为行指针。

    数据类型 (*指针变量名)[N];

    int a[4][3], (*p)[3];

    返回指针的函数
    函数类型 * 函数名([形式参数类型声明表])
    	{
    		函数体
    	}
    指向函数的指针

    指向函数的指针的一般定义形式:

    数据类型 (*指针变量名)(参数类型列表)

    调用方式:

    (*指针变量名)(实际参数列表)

    int (*FunctionPointer)(int a);
    FunctionPointer = func;   //func为函数名
    (*FunctionPointer)(100);
    带参数的main函数
    void main(int argc, char *argv[]){
    	函数体
    }

    argc表示命令行参数个数,argv表示参数数组

    指向结构体的指针
    struct student *p;
    struct student stu;
    p = &stu;
    //获取子元素的三种方法:
    stu.name;
    (*p).name;
    p->name;  //指针的方法
    指向结构体数组的指针

    指向结构体数组的指针实际上与前面定义的指向二维数组的指针类似,可以理解为二位地址数组的行指针。

    动态内存分配:

    void *malloc(unsigned int size);

    newptr = malloc(sizeof(struct node));

    void free(void *p)

    链表结构:
    #include<stdio.h>
    #define NULL 0
    #define LEN sizeof(struct student)  /*定义节点的长度*/
    #define NODE struct student
    struct student
    {
    	char no[5];
    	float score;
    	struct student *next;
    };
    
    struct student *create(void);
    void printlist(struct student *head);
    NODE * insert(NODE *head, NODE *new, int i);
    NODE * dellist(NODE *head,char no[]);
    
    void main(){
    	struct student *a;
    	struct student test1={"abc",1.0,NULL};
    	struct student *test2;
    	a = create();
    	printf("insert new node\n");
    
    	test2 = &test1;
    	a = insert(a,test2,2);
    	printlist(a);
    
    	printf("delete node\n");
    	a = dellist(a,"2");
    	printlist(a);
    
    	getch();
    }
    /*创建一个具有头结点的单链表,返回单链表的头指针*/
    struct student *create(void){
    	struct student *head = NULL, *new1, *tail;
    	int count = 0;
    	for(;;)
    	{
    		new1 = (struct student *)malloc(LEN);  /*申请一个新结点的空间*/
    		printf("Input the number of student No.%d(5bytes): ",count + 1);
    		scanf("%5s",new1->no);
    		if(strcmp(new1->no, "*") == 0)   /*这里不用加取址符号,因为no就表示数组的首地址*/
    		{
    			free(new1);   /*释放最后申请的结点空间*/
    			break;  /*结束for语句*/
    		}
    		printf("Input the score of the student No.%d: ",count + 1);
    		scanf("%f",&new1->score);
    		count++;
    		/*将新结点插入到链表尾,并设置新的尾指针*/
    		if(count == 1){
    			head = new1;   /*是第一个结点,置头指针*/
    		} else
    			tail->next = new1;  /*不是第一个结点,将新结点插入到链表尾*/
    		tail = new1;    /*设置新的尾结点*/
    	}
    	/*置新结点的指针域为空*/
    	new1->next = NULL;
    	return(head);
    }
    
    /*输出链表*/
    void printlist(struct student *head){
    	struct student *p;
    	p = head;
    	if(head == NULL) {
    		printf("List is empty!!!\n");
    	} else {
    		while(p!=NULL){
    			printf("%5s %4.1f\n", p->no,p->score);
    			p = p->next;
    		}
    	}
    }
    
    /*插入链表结点*/
    NODE * insert(NODE *head, NODE *new, int i){
    	NODE *pointer;
    	/*将新结点插入到链表中*/
    	if(head == NULL){
    		head = new; new->next = NULL;
    	} else {
    		if(i == 0){
    			new -> next = head;
    			head = new;
    		} else {
    			pointer = head;
    			/*查找单链表的第i个结点(pointer指向它)*/
    			for(;pointer != NULL && i > 1; pointer = pointer->next,i--);
    			if(pointer == NULL)
    				printf("Out of the range,can't insert new node!\n");
    			else {  /*一般情况下pointer指向第i个结点*/
    				new -> next = pointer->next;
    				pointer->next = new;
    			}
    		}
    	}
    	return(head);
    }
    
    /*删除链表*/
    NODE * dellist(NODE *head,char no[]){
    	NODE *front;    /*front表示要删除结点的前一个结点*/
    	NODE *cursor;   /*cursor表示当前要删除的结点*/
    	if(head == NULL) {  /*空链表*/
    		printf("\nList is empty\n");
    		return(head);
    	}
    	if(strcmp(head->no,no == 0)){  /*要删除的结点是表头结点*/
    		front = head;
    		head = head->next;
    		free(front);
    	} else {  /*非表头结点*/
    		front = head;
    		cursor = head->next;
    		/*通过循环移动到要删除的结点的位置*/
    		while(cursor != NULL && strcmp(cursor->no,no) != 0) {
    			front = cursor;
    			cursor = cursor ->next;
    		}
    		if(cursor != NULL){   /*找到需要删除的结点进行删除操作*/
    			front->next = cursor->next;
    			free(front);
    		} else {
    			printf("%5s has not been found!",*no);
    		}
    	}
    	return(head);
    }
    除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。

    本文链接:http://www.itzhai.com/c-language-syntax-notes-advanced-usage-of-two-dimensional-array-of-pointers-to-a-pointer-list-pointer-array-pointer-structure.html
    关键字: C语言, 指针, 链表
    展开全文
  • 我是个C新手,想请教大家,如果把指针数组定义错成int (*p)[4]后,这个东西怎么用,只能指向有四个元素的一维数组
  • ...1. 二维数组指针 ...要用指针处理二维数组,首先要解决从存储角度对二...我们知道,个二维数组在计算机中存储时,是按照先行后列顺序依次存储,当把每行看作个整体,即视为个大数组元素时...

    本文转载自:https://blog.csdn.net/qq_33573235/article/details/79530792

     

     


    1. 二维数组和指针

     

    要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。我们知道,一个二维数组在计算机中存储时,是按照先行后列的顺序依次存储的,当把每一行看作一个整体,即视为一个大的数组元素时,这个存储的二维数组也就变成了一个一维数组了。而每个大数组元素对应二维数组的一行,我们就称之为行数组元素,显然每个行数组元素都是一个一维数组

    下面我们讨论指针和二维数组元素的对应关系,清楚了二者之间的关系,就能用指针处理二维数组了。
    设p是指向二维数组a[m][n]的指针变量,则有:

    int* p=a[0];//此时P是指向一维数组的指针。P++后,p指向 a[0][1]。

    如果定义int (*p1)[n];p1=a;p1++后,p1指向a[1][0];  

    则p+j将指向a[0]数组中的元素a[0][j]。
    由于a[0]、a[1]┅a[M-1]等各个行数组依次连续存储,则对于a数组中的任一元素a[i][j],指针的一般形式如下:
    p+i*N+j             相应的如果用p1来表示,则为*(p1+i)+j
    元素a[i][j]相应的指针表示为:
    *( p+i*N+j)        相应的如果用p1来表示,则为*(*(p1+i)+j)
    同样,a[i][j]也可使用指针下标法表示,如下:
    p[i*N+j]
    例如,有如下定义:
    int a[3][4]={{10,20,30,40,},{50,60,70,80},{90,91,92,93}};
    则数组a有3个元素,分别为a[0]、a[1]、a[2]。而每个元素都是一个一维数组,各包含4个元素,如a[1]的4个元素是a[1][0]、a[1][1]、a[1]2]、a[1][3]。
    若有:
    int *p=a[0];
    则数组a的元素a[1][2]对应的指针为:p+1*4+2
    元素a[1][2]也就可以表示为:*( p+1*4+2)
    用下标表示法,a[1][2]表示为:p[1*4+2]
    特别说明:
    对上述二维数组a,虽然a[0]、a都是数组首地址,但二者指向的对象不同,a[0]是一维数组的名字,它指向的是a[0]数组的首元素,对其进行“*”运算,得到的是一个数组元素值,即a[0]数组首元素值,因此,*a[0]与a[0][0]是同一个值;而a是一个二维数组的名字,它指向的是它所属元素的首元素,它的每一个元素都是一个行数组,因此,它的指针移动单位是“行”,所以a+i指向的是第i个行数组,即指向a[i]。对a进行“*”运算,得到的是一维数组a[0]的首地址,即*a与a[0]是同一个值。当用int *p;定义指针p时,p的指向是一个int型数据,而不是一个地址,因此,用a[0]对p赋值是正确的,而用a对p赋值是错误的。这一点请读者务必注意。
     
     

    2. 用二维数组名作地址表示数组元素。

     
    另外,由上述说明,我们还可以得到二维数组元素的一种表示方法:
    对于二维数组a,其a[0]数组由a指向,a[1]数组则由a+1指向,a[2]数组由a+2指向,以此类推。因此,*a与a[0]等价、*(a+1)与a[1]等价、*(a+2)与a[2]等价,┅,即对于a[i]数组,由*(a+i)指向。由此,对于数组元素a[i][j],用数组名a的表示形式为:
    *(*(a+i)+j)
    指向该元素的指针为:
    *(a+i)+j

    数组名虽然是数组的地址,但它和指向数组的指针变量不完全相同。

    第一,指针变量的值可以改变,即它可以随时指向不同的数组或同类型变量,而数组名自它定义时起就确定下来,不能通过赋值的方式使该数组名指向另外一个数组。

    第二,数组名是指针,类型是指向元素类型的指针,但值是指针常量,声明数组时编译器会为声明所指定的元素数量保留内存空间。数组指针是指向数组的指针,声明指针变量时编译器只为指针本身保留内存空间。

    例4 求二维数组元素的最大值。


    该问题只需对数组元素遍历,即可求解。因此,可以通过顺序移动数组指针的方法实现。
    main()
    {
    int a[3][4]={{3,17,8,11},{66,7,8,19},{12,88,7,16}};
    int *p,max;
    for(p=a[0],max=*p;p<a[0]+12;p++)
       if(*p>max)
          max=*p;
    printf("MAX=%d/n",max);
    }
    执行结果:
    MAX=88
    这个程序的主要算法都是在for语句中实现的:p是一个int型指针变量;p=a[0]是置数组的首元素地址为指针初值;max=*p将数组的首元素值a[0][0]作为最大值初值;p<a[0]+12是将指针的变化范围限制在12个元素的位置内;p++使得每比较一个元素后,指针后移一个元素位置。
    例5 求二维数组元素的最大值,并确定最大值元素所在的行和列。
    本例较之上例有更进一步的要求,需要在比较的过程中,把较大值元素的位置记录下来,显然仅用上述指针移动方法是不行的,需要使用能提供行列数据的指针表示方法。
    main()
    {
    int a[3][4]={{3,17,8,11},{66,7,8,19},{12,88,7,16}};
    int *p=a[0],max,i,j,row,col;
    max=a[0][0];
    row=col=0;
    for(i=0;i<3;i++)
       for(j=0;j<4;j++)
         if(*(p+i*4+j)>max)
          {
            max=*(p+i*4+j);
            row=i;
            col=j;
          }
    printf("a[%d][%d]=%d/n",row,col,max);
    }
    程序运行结果:
    a[2][1]=88

     


    3. 行数组指针

     

    在上面的说明中我们已经知道,二维数组名是指向行的,它不能对如下说明的指针变量p直接赋值:

    int a[3][4]={{10,11,12,13},{20,21,22,23},{30,31,32,33}},*p;
    其原因就是p与a的对象性质不同,或者说二者不是同一级指针。C语言可以通过定义行数组指针的方法,使得一个指针变量与二维数组名具有相同的性质。行数组指针的定义方法如下:
    数据类型 (*指针变量名)[二维数组列数];
    例如,对上述a数组,行数组指针定义如下:
    int (*p)[4];
    它表示,数组*p有4个int型元素,分别为(*p)[0]、(*p)[1]、(*p)[2]、(*p)[3] ,亦即p指向的是有4个int型元素的一维数组,即p为行指针

    此时,可用如下方式对指针p赋值:

    p=a;

     

     


    4. 指针数组的定义

     

    指针数组是指每个元素中存放的是指针。定义为 int *p[4];sizeof(p)=16,返回的是数组的总空间

     


    5. 二级指针

     

    二级指针 :int**ptr:数据类型是int**,即指向指针的指针。

     

    转载于:https://www.cnblogs.com/oddcat/p/9701518.html

    展开全文
  • LOGO 数组与指针一维数组地址和指针 主讲人周芸 教学目标 掌握一维数组的指针的用法 理解一维数组指针的本质 具备应用一维数组指针编程的能力 张丽去排队打疫苗医生通过叫号的方式依次注射 引入 一指向一维数组的...
  • 数组 | 指针数组 | 数组指针一维数组含义用法指针数组含义用法二维数组 | 数组指针含义用法 一维数组 含义 这个比较基础,顾名思义即可。 定义 int p[5]; 数组包含5个元素,每一个元素都是int型数据。 用法 ...
  • 本文转载于 ...在数组中,如果它元素全部都是指针类型数据,
  • 编程中我们最长使用的是一维数组,二维数组的使用情况较少。所以对于二维数组相关指针的使用不太熟练,此片文章记录一下对二维数组相关指针的一些用法和解释。 相关指针的解释见代码注释。 #include <stdlib...
  • 1、二静态数组指针: int arr[3][2] = {{1,2},{3,4},{5,6}}; 调用函数定义方式: int func1( int (*arr)[2], int size ){ // size表示数组大小,应是3 arr[1][1] = 5;... } 或 int sum( int arr[][2] , int ...
  • 例如数组指针的本质就是一个指针,一个指向数组的指针;而指针数组的本质就是一个数组,一个成员都是指针的数组。 1.数组指针 1.1 基本概念 数组指针,即指向一个数组的指针。可以指向一维数组,也可以指向二维数组...
  • 指针难,是因为指针针对不同的情况,有不同的用法,一头扎进去会比较混乱,搞不清楚状况,让人头疼,但是!!!理清关系之后,对于指针的运用会很清晰。 这里,我们通过对指针各种情况的说明来认识指针,看看指针真...
  • 一维数组做函数参数的用法: 当一维数组做函数参数的时候,会退化为指针 一维数组做函数参数的时候,c/c++编译器会做优化 int a[10] ----->int a[] ---->int *a 所以数组作函数参数的时候只能传指针 3....
  • 想要了更容易的了解指针,很好的用法就是通过数组来了解,在c里面,感觉一维数组和一级指针的用法差不多,而二级指针和二维数组的用法差不多,所以通过数组来了解指针是一种很好的方法;  数组:将相同 数据类型的...
  • 一维数组指针

    2013-10-29 00:03:38
    今天看了一维数组指针的用法,感觉对指针的概念渐渐变的清晰很多,以下是我做的实例巩固代码 #include int main() {  int *p,i,a[5];  p=&a[0];  printf("请输入数字:\n");  for(i=0;i  {  scanf...
  • (1)指针数组:实际上是一个数组,只不过数组内存放指针,我们把它叫做指针数组;... 例如:int *arr[10] //这是一个一维指针数组; 具体用法如下:int main() { //定义两个指针 char *a = "hello"; ch
  •    指针一种特殊“复合类型”,它定义依托种其他类型。简单来说就是指向个对象变量,它保持是这个变量地址,通过这个指针可以访问该变量。定义方式: int *p、int**p、int (*p)[4]等。但...
  • 书中说形参(pointer是个指向包含4个元素的一数组指针这我能理解) 1.但是为什么(score[][4]明明是个二维数组,为什么可以将首地址作为位数组指针传进函数里?) 2.还有就是(pt是个float指针,pointer也...
  • 数组指针:a pointer to an array,即指向数组指针(该指针指向这个数组首地址) 还要注意是他们用法的区别,下面举例说明。 int* a[4] 指针数组 表示:数组a中元素都为int型指针 元素表示:a[i] (a[i])是...
  • 文章目录(数组指针、指针数组(二)函数指针(三)typedef的用法(四)二重指针(五)二维数组(六)二维数组指针的关系 (数组指针、指针数组 指针数组 实质是个数组,这个数组中存储的内容全部...
  • 当main函数内定义了个二维数组,其他功能函数想用这个二维数组怎么办? 常用2种办法: 、二维数组作形参(最简单,好理解) void output(char a[][4]); int main(){ char a[2][4]={"min","you"}; //这里二...
  • 维数组用法

    千次阅读 2015-07-13 11:36:16
    一维数组:int a[5]; 指针表示: int *p = a; 二维数组:int a[4][5]; 指针表示: int (*p)[5] = a; 三维数组:int a[3][4][5];指针表示: int (*p)[4][5] = a; p表示指向数组指针#include #include //这里...
  • C/C++二维数组的用法

    2016-06-09 01:00:00
    维数组在存储时按行优先连续存储,数组名是个二维指针,如 int a[3][2] 中,a 是个二维指针,而a[0],a[1],a[2]都相当于普通的一位数组数组名,是个固定值的指针。 二维数组在声明时候可以直接全部赋值...
  • int a[] = {1,2,3,4,5};...// 数组名本身就是指针,再加上个&就变成了双指针,这里指针就是指二维数组,加1,就是数组整行加行,ptr指向a第6个元素 printf("%d %d",*(a+1),*(ptr-1)); // 结果:2,5
  • 指针输出二维数组技巧解析 千万不要觉得二维数组中 * 也表示取值,两次 * 才表示取值,而在二维数组中第一个*...//一维数组中 :a[1] 与 *a(+1) //二维数组中 :&a[1][1] 与 *(a+1)+1 等价,这里*是固定用法,第...
  • 一维数组: 定义:基类型 数组名[这里是大小]; eg: int array[10]; 注意地方 int array[15]={1,2,3,4,5,6}; //可以这样初始化 printf("%d ",array); //数组名为首地址,即array[0]地址 printf("%d ",*array); /...
  • 所以当我尝试用二级指针去访问二维数组时,就经常会出错。下面就是刚开始写的一个错误程序: #include <stdio.h> int main() { int iArray[2][3] = {{1,2,3},{4,5,6}}; int **pArray = NULL....
  • 一维数组的定义与初始化 指针和数组 本文参考资料 C++ Primer, 5e; Coursera北大数据结构与算法课程。 1. 概论 指针在C\C++语言中是很重要内容,并且和指针有关内容一向令人头大。在本教程中,我...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 218
精华内容 87
关键字:

一维数组指针的用法