目录
案例2:编程实现,使用行指针表示二维数组int a[2][4]的元素a[1][1]
案例1:不利用任何字符串函数,编程实现字符串连接函数的功能。
1、指针与二维数组
多维数组就是具有两个或两个以上下标的数组
在C语言中,二维数组的元素连续存储,按行优先存
案例1 :遍历数组
可把二维数组看作由多个一维数组组成。
比如int a[3][3],含有三个元素:a[0]、a[1]、a[2]
元素a[0]、a[1]、a[2]都是一维数组名
二维数组名代表数组的起始地址,数组名加1,是移动一行元素。因此,二维数组名常被称为行地址。
代码如下:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[3][2]={{1,6},{9,12},{61,12}};
int *p,i,n;
n=sizeof(a)/sizeof(int);
p=a[0];//&a[0][0];
printf("%ld\n",sizeof(a[1]));
printf("%p %p\n",p,p+1);
printf("%p %p\n",a,a+1);
for(i=0;i<n;i++)
{
printf("%d ",*(p+i));
}
puts("");
return 0;
}
运行结果:
行指针(数组指针)存储行地址的指针变量,叫做行指针变量。形式如下:
<存储类型><数据类型>(*<指针变量名>)[表达式] ;
例如,int a[2][3];int (*p)[3];方括号中的常量表达式表示指针加1,移动几个数据。当用行指针操作二维数组时,表达式一般写成1行的元素个数,即列数。
案例2:编程实现,使用行指针表示二维数组int a[2][4]的元素a[1][1]
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[3][2]={{1,6},{9,12},{61,12}};
int (*p)[2],i,j,row,res;
p=a;
printf("%d\n",a[1][1]);
return 0;
}
运行结果:
2、字符指针与字符串
C语言通过使用字符数组来处理字符串。
通常,我们把char数据类型的指针变量称为字符指针变量。字符指针变量与字符数组有着密切关系,它也被用来处理字符串。
初始化字符指针是把内存中字符串的首地址赋予指针,并不是把该字符串复制到指针中
charstr[] =“Hello World”;
char*p = str;
在C编程中,当一个字符指针指向一个字符串常量时,不能修改指针指向的对象的值
char*p =“Hello World”;
*p =‘h’;//错误, 字符串常量不能修改
案例1:不利用任何字符串函数,编程实现字符串连接函数的功能。
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char ch[128]="Hello",*q;
char *p=" world";
int i=0;
q=p;
while(*(ch+i)!='\0')
{
i++;
}
while(*p!='\0')
{
*(ch+i)=*p;
i++;
p++;
}
*(ch+i)=*p;
p=q;
puts(ch);
puts(p);
return 0;
}
运行结果:
以上均为学习笔记,仅供参考,如有错误,欢迎指正!