指针与二维数组

这是一个大一的学生问我的问题,当时竟然搞糊涂了!!!

 1 #include <stdio.h>
 2 int main()
 3 {
 4      char str[ ][10]={"China","Beijing"};
 5      char *p;
 6      p = str[0];
 7      printf("%s\n",p+10);
 8      while(1);
 9      return 0;
10 }
11 /*
12 p输出china
13 p+1输出hina
14 …………
15 P+4输出a;
16 从P+5到p+9,无输出
17 p+10输出beijing
18 */
19  
 1 //指向二维数组行的指针变量 ,使用行地址,即p+1是str[1]
 2 #include <stdio.h>
 3 int main()
 4 {
 5      char str[ ][10]={"China","Beijing"};
 6      char (*p)[10];//p是指针,指向含有10个char型元素的一位数组
 7      p = str;//不是str[0] ,也不能是&str[0][0] ,可以使&str[0]
 8      printf("%s\n",p+1);//输出beijing
 9      while(1);
10      return 0;
11 }
 1 //指向二维数组的指针,使用列地址,即p+1是str[0][1]
 2 #include <stdio.h>
 3 int main()
 4 {
 5      char str[ ][10]={"China","Beijing"};
 6      char *p;
 7      p = str[0];
 8      printf("%s\n",p+1);//输出hina
 9      while(1);
10      return 0;
11 }

综上:str和str[0],str+1和str[0]+1的值虽然相同,但是意思却截然不同,一个是行地址,一个是列地址,也就是说相应指针执行加一操作时,1所代表的字节数是不一样的.

 

 1 //使用二级指针
 2 #include<stdio.h>
 3 #define SIZE 5
 4 int main( )
 5 {
 6      char *pc[]={" Beijing", "Shanghai", "Tianjing", "Guangzhou", "Chongqing" };
 7      char **p;
 8      int i;
 9      for ( i=0; i<SIZE;i++)
10      {
11           p = pc+i;
12           printf ("%s\n", *p);
13      }
14      while(1);
15      return 0;
16 }

 使用上面的传参时,fun(char *str[])

//指向字符数组的指针变量
char str[20]={"abcdef"};//定义时初始化,否则只能用输入函数了 。可以省略20,直接str[]={"abcde"}
char *p;
p = str;//&str[0]也可
使用for(i=0;p[0]!='\0';i++)即可遍历

 

//指向字符串常量的指针变量
char *p = "abcde";//定义时初始化,只是将字符串的首地址给了p,c中没有字符串变量
等价于
char *p;
p = "abcde";
输出时直接printf("%s\n",p);
从第二位 printf("%s\n",p+1);

 

综上:可以看出使用字符串指针比较方便,也比较安全。

 1 //指针数组
 2 #include <stdio.h>
 3 int main()
 4 {
 5      static int a[3][3]={1,2,3,4,5,6,7,8,9};
 6      int *p[3] = {a[0],a[1],a[2]};
 7      for(int i=0;i<3;i++)
 8           printf("%d ",*p[i]);//每行的第一个元素
 9      printf("\n");
10      while(1);
11      return 0;
12 }
13  

 

时间: 2024-10-28 19:09:06

指针与二维数组的相关文章

c++的问题-指针和二维数组的用法

问题描述 指针和二维数组的用法 int *s for(i=0;i<5;i++) for(j=0;j<5;j++) cout<<s[i][j];//error想请教各位程序员哥哥这个要怎么改啊? 解决方案 楼上的就行了,int (*s)[5][5] 也可以吧. 解决方案二: 虽然是二维的数组,其实指针的指的是第一行第一列,所以*s[i]就成了一个一维数组的指针,在c++里面你还可以试试引用,同时理解指针. 解决方案三: 首先,s在此处定义为一维,二维引用会导致错误.其次,对于s,没有

二级指针创建二维数组

问题描述 二级指针创建二维数组 1) 编写函数CreateMatrix( int **a,int n, int m),生成一个n行.m列的矩阵,矩阵中的元素由随即函数rand()生成(范围1~99). 解决方案 #include <stdio.h> #include <stdlib.h> #include <time.h> void CreateMatrix( int **a,int n, int m) { int i,j; a = (int**)malloc(n*si

《指针的编程艺术(第二版)》一3.2 指针与二维数组

3.2 指针与二维数组 指针的编程艺术(第二版) 一维数组与指针的关系前面已经介绍过.一维数组的元素值,可使用[]或一个*得到,假设有一个数组如下: int i[7] = {0, 1, 2, 3, 4, 5, 6}; int *ptr=i; 则(i+2) 或i[2] 或(ptr+2) 或ptr[2],都表示数组某一个元素的值.而二维数组(two dimension array){XE "二維陣列(two dimension)"},则需要两个,或一个与一个[ ],或两个[ ],才能得到数

求大神讲解一下指针指向二维数组时该怎么用?

问题描述 求大神讲解一下指针指向二维数组时该怎么用? 指针指向一维数组时只用*(p+n)即可,但是二维数组时候改怎么用呢? 解决方案 个人认为其实二维数组还是一维数组,没有什么区别,例如int a[3][4],就相当于int a[12].要想访问a[2][3],就用*(a+(4*2+3)*(sizeof(int))),应该是这样,不过我一般用a[4*2+3] 来访问对应的元素 本人也是菜鸟,如果有错还请大神们指正~ 解决方案二: 由于指针与数组之间可以若转化,所以在一定程度上可以理解为数组就是指

C语言 指针与二维数组详解_C 语言

二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有"缝隙".以下面的二维数组 a 为例: int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} }; 从概念上理解,a 的分布像一个矩阵: 0   1   2   3 4   5   6   7 8   9  10  11 但在内存中,a 的分布是一维线性的,整个数组占用一块连续的内存: C语言中的二维数组是按行排列的,也就是先存放 a[

指针-关于二维数组a中,a[1] 与 &amp;amp;amp;a[1]相等的一个疑问?(从来没弄懂)

问题描述 关于二维数组a中,a[1] 与 &a[1]相等的一个疑问?(从来没弄懂) 对二维数组a[][]来说,a[1] 与 &a[1]相等.我来分析一下我的误解: 首先,a[m] 里面的内容是一个一维数组的首地址. 而 &a[m] 是 a[m] 的地址,它们相等. 说明 a[m] 的内容其实就是他本身的地址编号 (把 a[m] 看成一个变量) 对于一个内容就是地址的变量m,&m 与 m 相等 毋庸置疑. 然而 &a[m][0] 也等于 a[m] 说明 a[m][0]

C语言及程序设计提高例程-35 使用指针操作二维数组

贺老师教学链接  C语言及程序设计提高 本课讲解 使用指向二维数组元素的指针 #include <stdio.h> int main( ) { int a[3][4]= {1,3,5,7,9,11,13,15,17,19,21,23}; int *p; for(p=a[0]; p<a[0]+12; p++) { printf("%3d ",*p); } return 0; } 使用指向一维数组的指针 #include <stdio.h> int main(

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

原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表本文由 arthinking 发表于315 天前 ⁄ itzhai.com原创文章 ⁄ C语言 ⁄ 评论数 3 ⁄ 被围观 1,775 views+   指针数组: 在一个数组中,如果它的元素全部都是指针

一个现成的二维数组,如何定义一个 指针的指针 来指向这个二维数组?

问题描述 一个现成的二维数组,如何定义一个 指针的指针 来指向这个二维数组? 例:这样一个数组,想定义一个指针的指针,指向它. int arr1[4][4] ={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; ps. 这个指针的指针 是 用来传递个函数的. 因为某种要求,需要向函数传递一个二维数组,函数的形参表中定义了 int **. 因此 这个指针的指针一定要能够传递函数,并且函数能够通过它操作二维数组元素. 解决方案 指向二维数组的