C语言数组与指针(四)
来源:互联网 发布:收发存excel怎么编程 编辑:程序博客网 时间:2024/05/22 10:51
//不能对未初始化的指针取值 *p,会导致内存错误,因为p指针只是分配了指针内存,没有分配数据内存,4不知道会被存到哪里;应该分配一个已存在指针地址
int *p;
int f = 4;
*p = 4; //错误:
p = &f; //正确: 将一个已经分配的指针地址赋值给 p
数组初始化
int array(){ //1、整型数组 int i_ary[] = {1,3,5}; //i_ary 就是指针,是数组首元素的地址, printf("i_ary数组通过地址获取每元素值:\n默认首元素--%d\n [0]--%d\n [1]--%d\n [2]--%d\n",*i_ary,*(i_ary+0),*(i_ary+1),*(i_ary+2)); /* 默认首元素--1 [0]--1 [1]--3 [2]--5 */ int ii_ary[2] = {1,2}; //2、浮点数组 float f_ary[] = {1.1,2.2,3.3}; float ff_ary[(int) 2.5]; ff_ary[1] = 1.2; ff_ary[0] = 2.343; //3、字符数组 char c_ary[] = {'a','b','d'}; char c2_ary[] = "ABD"; //字符串会自动添加 '\0'结束符,数组元素个数 = 实参+结束符 //TODO:先声明后赋值 //如果只初始化一部分,未必初始化部分会被设置为0 int l_ary[4]; l_ary[0] = 1; l_ary[1] = 2; l_ary[2] = 3; l_ary[3] = 4; printf("下标1的元素:%d\r\n",l_ary[1]); scanf("%d",&l_ary[1]); printf("输出:%d\n",l_ary[1]); //C99新特性:指定下标初始化 int c99_ary[10] = {[1]=3,[3]=10,[8]=44}; /** * 输出结果: (int [10]) c99_ary = ([0] = 0, [1] = 3, [2] = 0, [3] = 10, [4] = 0, [5] = 0, [6] = 0, [7] = 0, [8] = 44, [9] = 0) */ }
多维数组
int arrays(){ //5个由12个整数组成的数组的数组,每个元素包含12个整型数组 int i_ary[5][12]; //每个元素的类型是 int[12] //多维数组赋值 int ii_ary[5][12] = {{1,2},{2,3,3,5,7,8},{35,333,1},{32,3,111},{456,66,999}}; int m[3][5] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; int aba = 10; int *m2[] = {&aba,&aba}; int *m3[2][2] = {{&aba,&aba},{&aba,&aba}}; char sdf[2][3] = {{"sf"},{"df"}}; char sdf2[2][3] = {"sf","df"}; //指针数组 char *cc_ary[] = {"adfdf","dfffd","sdfdf"}; char *wer[] = {"dsf","dfdf","dfdf"}; char *wer2[] = {"dsfdf"}; char *wer3[2][2] = {"dsf","dfdf"}; //字符数组 char aa[] = {"dfdfdf"}; char aa2[2][3] = {{"df"},{"aa"}}; return 0;}
数组与指针(参考网络)
int arrayAndPointer(){ static int m[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};/* 定义二维数组m并初始化*/ int (*p)[4];//数组指针 p是指针,指向一维数组,每个一维数组有4个int元素 int i,j; int *b; int *q[3] = {b,b,b};//指针数组 q是数组,数组元素是指针,3个int指针 p=m; //p是指针,可以直接指向二维数组 printf("--数组指针输出元素--\n"); for(i=0;i<3;i++)/*输出二维数组中各个元素的数值*/ { for(j=0;j<4;j++) { printf("%3d ",*(*(p+i)+j)); } printf("\n"); } printf("\n"); for(i=0;i<3;i++,p++)//p可看成是行指针 { printf("%3d ",**p);//每一行的第一个元素 printf("%3d ",*(*p+1));//每一行的第二个元素 printf("%3d ",*(*p+2));//每一行的第三个元素 printf("%3d ",*(*p+3));//每一行的第四个元素 printf("\n"); } printf("\n"); printf("--指针数组输出元素--\n"); for(i=0;i<3;i++) q[i]=m[i];//q是数组,元素q[i]是指针 for(i=0;i<3;i++) { for(j=0;j<4;j++) { printf("%3d ",q[i][j]);//q[i][j]可换成*(q[i]+j) } printf("\n"); } printf("\n"); q[0]=m[0]; for(i=0;i<3;i++) { for(j=0;j<4;j++) { printf("%3d ",*(q[0]+j+4*i)); } printf("\n"); } printf("\n"); return 0; //_____________ printf("4的十六%#x",4); for (int i=0; i<3; i++) { for (int y=0; y<4; y++) { printf("每个元素值是:%p\n",&(m[i][y])); } }}
int pointer(){ //1、整形指针 int i_ary[] = {1,3,5}; int ii_ary[] = {1,2}; int *iii_ary[11]; printf("%p",i_ary); int tt = 5; int *b = &tt; //地址赋值给左边指针 //数组首地址赋值给指针,指针通过内存地址取值 int iiii[11] = {1,2,3}; //指针数组,元素类型为整型 printf("0=%p 1=%p",&iiii[0],&iiii[1]); int *asdf = iiii; int ss = *(asdf+1); //asdf[1] 等同于 *(asdf+1) ; //2、浮点指针 //3、char指针 char *cc_ary[] = {"adfdf","dfffd","sdfdf"}; return 0;}
0 0
- C语言数组与指针(四)
- C语言基础 (四)指针与数组
- C语言:指针数组与数组指针
- C语言指针数组与数组指针
- C语言指针数组与数组指针
- C语言指针与数组
- C语言 指针与数组
- C语言指针与数组
- C语言数组与指针
- C语言数组与指针
- C语言数组与指针
- c语言指针与数组
- c语言数组与指针
- c语言指针与数组
- 【C语言】数组与指针
- C语言 指针与数组
- C语言数组与指针
- C语言--指针与数组
- 初识gdbserver
- BIEE XML文件
- hdu 1258 Sum It Up
- ios获取当前的时间
- 高等数学:第十一章 无穷级数(1)常数项技术的概念、性质、审敛法、幂级数
- C语言数组与指针(四)
- u盘在我的电脑中不显示
- 图像因其本身有错无法显示 解决方法
- 在liunx系统安装一些rpm软件包
- Markdown语法介绍
- 算法代码实现之选出第k小元素、中位数、最小的k个元素(线性复杂度),C/C++实现
- 移植tslib1.4到tiny6410
- 算法导论:第8章 线性时间排序__计数排序
- 高等数学:第十一章 无穷级数(2)函数的幂级数展开式、傅里叶级数