c语言中如何定义动态指针数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中如何定义动态指针数组相关的知识,希望对你有一定的参考价值。
1、使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小。
2、例程,分配3行4列二维数组:
#include <malloc.h>
int main()
int **a;
int i, j;
a = (int**)malloc(sizeof(int*)*3);//为二维数组分配3行
for (i = 0; i < 3; ++i)//为每列分配4个大小空间
a[i] = (int*)malloc(sizeof(int)*4);
//初始化
for (i = 0; i < 3; ++i)
for (j = 0; j < 4; ++j)
a[i][j] = i+j;
//输出测试
for (i = 0; i < 3; ++i)
for (j = 0; j < 4; ++j)
printf ("%d ", a[i][j]);
printf ("\\n");
//释放动态开辟的空间
for (i = 0; i < 3; ++i)
free(a[i]);
free(a);
return 0;
/*
输出:
0 1 2 3
1 2 3 4
2 3 4 5
*/ 参考技术A 可以这样子写
int n;
printf("请输入你想定义的数组的大小:\n");
scanf("%d",&n);
int *a = (int *)malloc(n*sizeof(int));//申请n个整形数据空间 ,头文件为stdlib.h/malloc.h
if(a == NULL)//申请失败返回-1
printf("aply error\n"); return -1;
memset(a, 0, n); //初始化申请到的空间为0,头文件为string.h
但是定义不了动态数组本回答被提问者和网友采纳 参考技术B
假设你想定义的数组是 int a[n],动态的定义方式是:
#include <stdlib.h>int main()
...
int *a = (int*)malloc(sizeof(int)*n);
...
参考技术C int size=5; //数组大小 自己可以随便定义 或是让用户输入
char *p=new char[size]; //或是int 等其他类型类似
之后把p当数组用就好,比如p[0]就是数组的0号元素
C语言如何定义指针指向字符型二维数组
使用指针变量访问二维数组的任意一个元素的方法:
1.使用列指针:定义一个列指针p,让它指向二维数组的第0个元素
int a[3][4];
int *p;
p=&a[0][0];
//因为a[0]是第0行的数组名,所以p=&a[0][0]相当于p=a[0],因为a[i][j]前面共有i*4+j个元素
该二维数组的任意i行j列元素可表示为*(p+i*4+j)。
2.使用行指针:定义一个行指针p,让它指向二维数组的第0行
int a[3][4];
int (*p)[4];
p=a; //也可以为p=&a[0];
其中* ( *(p+i)+j)表示任意一个i行j列的元素。
扩展资料:
数组的使用规则:
1.可以只给部分元素赋初值。当 中值的个数少于元素个数时,只给前面部分元素赋值。例如:static int a[10]=0,1,2,3,4;表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。
2.只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]=1,1,1,1,1,1,1,1,1,1;而不能写为:static int a[10]=1;请注意:在C、C#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。
3.如不给可初始化的数组赋初值,则全部元素均为0值。
4.如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如:static int a[5]=1,2,3,4,5;可写为:static int a[]=1,2,3,4,5;动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。
参考资料:
百度百科-数组
参考技术A在C语言中,可以通过如下方式来定义指向字符型二维数组的指针:
char c[4][5]; // 定义一个4行5列的字符型二维数组char (*pc)[5]; // 定义一个含5个元素的数组指针
pc=c; // 将数组指针pc指向二维字符数组c
注:
char (*pc)[5] 不能写为 char *pc[5]
char (*pc)[5] 表示数组指针,数组中每个元素为char型;
char *pc[5] 表示指针数组,数组中每个元素为char*,也即每个元素为指针。
参考技术B1、定义二维指针数组与定义一维指针数组差不多,只是矩阵的维度增加了一维而已。
2、下面通过具体的实例来说明如何定义一个二维数组:
int i,j; // 数组的行数和列数
// 下面的2个for循环是用来对二维指针数组进行初始化的,也即分配地址。如果不进行初始化操作,就会使指针变为野指针(即指向不明)。
for(i=0; i<2; i++)
for(j=0; j<3; j++)
p[i][j] = (int *)malloc(sizeof(int));
*p[0][1] = 2; // 对指针数组中指针所指向的内存单元进行赋值操作
printf("%d\\n", *p[0][1]); // 输出结果 参考技术C 定义字符型二维数组:char str[3][10];
定义指针型数组 : char *p[5] = str[0],str[1],str[2]; 参考技术D 如定义:int a[3][4];
int *p; p=a[0];此时p就指向0行0列元素
以上是关于c语言中如何定义动态指针数组的主要内容,如果未能解决你的问题,请参考以下文章