C语言【指针】二维数组和字符串与指针的关系
2013-04-30 20:31
746 查看
指针与多维数组
多维数组地址的表示方法:二维数组s[3][4] 定义 int s[3][4]={ {0,2,4,6},{1,3,5,7},{9,10,11,12} }根据以上的一个二维数组的例子,就有如下表示:
注意:S代表着二维数组的首地址,s+1代表第一行的首地址,而s[1]代表着第一行第一列的地址,虽然s+1和s[1]都是代表着同一个地址,但是他们还是有区别的。比如:*(s[0]+1)是访问第0行第1列的值,既然s=s[0],那么*(s+1)是访问第0行第1列的值这种说法是错误的,因为s+1,s,s+2是每一行数组的首地址,不牵扯到列的概念,所以是行操作。需要进行行转列,将s视为由s[0],s[1],s[2]组成的一维数组,那么,s[0]=*(s+0),所以s[0+1]=*(s+0)+1=&s[0][1],即s[i]+j=*(s+i)+j=&s[i][j]。总之:s[1]=s+1是地址上的相等,操作上是不相等的。而 S[1]=*(s+1)不仅地址是相等的,操作也是相等的。指向多维数组的指针变量 实例
#include <stdio.h> main() { int a[3][4]={{0,2,4,6},{1,3,5,7},{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个元素组成的一维数组的指针变量 实例
#include <stdio.h> main() { int a[3][4]={{0,2,4,6},{1,3,5,7},{9,10,11,12}}; int (*p)[4],i,j; //数据类型为(*p)[m],p是一个指针变量,指向包含m个元素的一维数组; //p指向的是横坐标的第一个,p+0地址中的值是0,p+1的值是1,p+2的值是9。 p=a; printf("请输入要输出的数组坐标"); scanf("%d,%d",&i,&j); printf("s[%d,%d]=%d\n",i,j,*(*(p+i)+j));//*(p+i)+j是行转列。 }
指向多维数组的指针作为函数参数。实例 题目:一个班有3个学生,各四门课程,计算总平均分数和第n个学生的成绩。
#include <stdio.h> main() { void average(float *p,int n); void search(float (*p)[4],int n); float score[3][4]={{65,75,54,80},{78,90,89,76},{66,76,87,90}}; int n; average(*score,12); printf("enter a number to n:\n"); scanf("%d",&n); search(score,n); } void average(float *p,int n) { float *p_end=p+n,aver=0; for(;p<p_end;p++) aver=aver+*p; aver=aver/n; printf("Average=%7.2f\n",aver); } void search(float (*p)[4],int n) { int i; for(i=0;i<4;i++) printf("%7.2f",*(*(p+n)+i)); }
指针与字符串
字符数组#include<stdio.h> main() { char string[]="I am a student"; printf("%s\n",string); }
注意:(1):字符数组的长度要加上最后的结尾标志(“\o”); (2)string数组名代表数组首地址,string+4表示第4个元素的地址 (3)%S表示整体输出,%X表示16进制输出,%C是一个字符。如果是%d,则输出的就是地址。字符指针
#include<stdio.h> main() { char *string="I am a student"; //char a[]=” ”,*string; string=a printf("%s\n",string); }
string是指向字符串的指针变量,存放了元素首地址,*在此毫无意义,表示指针类型。字符数组与字符串指针的区别 (1)存储方式:字符数组:分配一个存放元素的单元。 字符串指针:分配一个存放元素地址的单元,地址指向元素首地址。不 是将整个字符串放到字符指针变量中。 (2)赋值方式:字符数组:char str[16]={“a,b,c”} 字符串指针: char *str=”abc” char *str; str=”abc”;(3)定义方式:字符数组:char str[10];scanf(“%s”,str); 字符串指针:char *str,a[10];str=a;scanf(“%s”,str); 指针str必须得指向一个数组, 不然就是野指针了。(4)运算方面字符数组:字符数组名是常量,不能进行运算,不能改变值。如: char a[]=”abc”; a=a+1;这是错误的。 字符串指针: 指针变量的值是可以改变的,可以进行运算,如++,==等操作。 如:char *a=”abc”; a=a+1;这是正确的字符串指针作为函数参数
#include "stdio.h" #include "string.h" void inv(char *s) { for(;*s !='\0';s++) { if(*s>=65 && *s<=90) *s+=32; else if (*s>=97 && *s<=122) *s-=32; } } main() { char *string,a[10]; string=a; gets(string); inv(string); puts(string); }
这个程序是大小写转换的一个程序 。注意结束标志“\0”中的0是数字0,而不是字母o .
相关文章推荐
- C语言学习历程(十一)二维数组与指针的关系
- 二维数组和字符串与指针的关系
- C语言二维数组和指针的关系
- C语言字符串以及二维数组指针
- C语言中字符数组和字符串指针分析
- c语言—指针基础(3:指针和数组的关系)
- 一道关于二维数组和指针数组的C语言笔试题目
- C语言中,指针字符串与数组字符串的区别
- 黑马程序员--c语言:字符串、指针
- 关于C语言的二维数组和指针注意的地方
- 黑马程序员——ios基础---C语言:字符串、指针
- c语言二维数组与指针
- C语言 字符串用指针数组将字符串进行排序
- C语言中字符数组和字符串指针分析
- 《C语言及程序设计》实践项目——二维数组与指针
- 黑马程序员-------C语言回顾-字符串指针
- C语言指针系列 - 一级指针.一维数组,二级指针,二维数组,指针数组,数组指针,函数指针,指针函数
- C语言day3(字符串,字符数组,一级指针的典型用法)
- 【C语言】13-指针和字符串
- 黑马程序员 C语言 - 06 数组、二维数组、字符串