数组指针初始化,我定义了一个指针数组,比如a[15],我应该怎么初始化?
数组指针初始化,我定义了一个指针数组,比如a[15],我应该怎么初始化?详细介绍
本文目录一览: c 语言中的数组指针可以被初始化为空指针吗?
任何指针都可以初始化为空(NULL),如果指针是变量的话,还可以赋值为空。
比如:
int*
p0
=
NULL;
//
整型指针初始化为空
p0
=
NULL;
//
赋值为空
-------------------
void
(*p1)
(int)
=
NULL;
//
函数指针初始化为空
p1
=
NULL;
//
赋值为空
-----------------------
int
a[20];
//
数组
int
(*p2)[20]
=
&a;
//
数组指针初始化为数组地址
int
(*p3)[20]
=
NULL;
//
数组指针初始化为空
p2
=
NULL;
//
赋值为空
p3
=
NULL;
//
赋值为空
c 语言中的数组指针可以被初始化为空指针吗?
可以的,空类型指针,即void *p,不指定他是指向哪种数据类型,即他可以指向任意种数据类型
可以, int *p=NULL;就可以了
任何指针都可以初始化为空(NULL),如果指针是变量的话,还可以赋值为空。
比如:
int* p0 = NULL; // 整型指针初始化为空
p0 = NULL; // 赋值为空
-------------------
void (*p1) (int) = NULL; // 函数指针初始化为空
p1 = NULL; // 赋值为空
-----------------------
int a[20]; // 数组
int (*p2)[20] = &a; // 数组指针初始化为数组地址
int (*p3)[20] = NULL; // 数组指针初始化为空
p2 = NULL; // 赋值为空
p3 = NULL; // 赋值为空
我定义了一个指针数组,比如a[15],我应该怎么初始化?
指针数组,就是存储指针变量的数组,如以下代码初始化,主要演示一下
char *a[2] 定义了一个数组,它包含两个元素,这两个元素是指向char型数据的指针。
怎么理解呢,如过我们定义一个数组 char a[2],这时a[0] ,a[1]表示一个字符,比方说 ‘s' ,’x',
现在是 char * a[2] ,这时a[0],a[1]表示一个字符串了,比如"abceef" , ”thank you"
#include
main()
{
char *a[2];
a[0]="hello";
a[1]="world";
printf("%s %s\n",a[0],a[1]);
return 0;
}
看书。。。。指针单元,很详细
指针一般初始化成NULL,在分配内存或者指向固定变量时改变其内容。指针数组也一样初始化成NULL。这样可以判断指针如果NULL则该指针可以分配,如果不等于NULL,则说明指针已经被分配内存或者指向某一变量。一般在用完了指针,收回了分配的内存,比如delete以后,也要及时将指针赋值为NULL,便于再次使用。
对*a[15]的初始化可以这样进行:
for(int i=0;i<15;i++) a[i]=NULL;
不知道是否理解了你的问题,仅供参考。
如何创建指向字符串变量的指针数组及初始化?
1、在运行命令中输入”char *str[]={"Hello","C++","World"}“。
2、按照步骤运行命令:#include
,#include
,void main(){char *str[] = {"Hello", "C++", "World"}。char **p;for(p=str; p
<str+3; p++)puts(*p); }
指针数组是指在C语言和C++语言中,数组元素全为指针的数组。
指针数组可以作为函数的参量使用,使用方式与普通数组类似。
指针数组常适用于指向若干字符串,这样使字符串处理更加灵活方便。
怎么给指针数组分配内存和初始化
指针数组, 每个指针要单独分配内存,不过 如果各个指针上分配长度不相等,那么需要自行记住每个指针上内存的大小, 避免越界。
可以使用循环进行分配及初始化。
以定义一个5个元素的int*数组, 每个上分配10个int型空间,并初始化为0为例
int *a[5];int i,j;for(i = 0; i < 5; i ++){ a[i] = (int *)malloc(sizeof(int)*10); for(j = 0; j < 10; j ++) a[i][j] = 0;}
结构体指针数组怎么初始化?
#include
using namespace std;
#define MAX 27
typedef struct
{
char x;
int y;
}Quan,*QQuan;
void main()
{
QQuan a[MAX];
for(int i=0;i
<max;i++)
{
a[i]=new Quan;
a[i]->x='0';
a[i]->y=0;
}
for(i=0;i
<max;i++)
{
cout<
x<<"\t"<
y<
<endl;
}
}
自己看吧,相信你会看懂的,关键的一点就是new分配指针空间。
for(i=0;i
<max;i++)
{
a[i]=(QQuan)malloc(sizeof(Quan));
memset(a[i],0,sizeof(Quan));
}
需要引用
和
头文件
//QQuan a[MAX]是指针数组,不可能如你所说的初始化。
//Quan a[MAX]最前面少一个Q,才可以如你所说初始化,下面是测试程序。
#include
#define MAX 27
typedef struct
{
char x;
int y;
}Quan,*QQuan;
void main()
{
Quan a[MAX]={{0,0}};
int i;
for(i=0;i
<max;i++)
printf("%c%d\n",a[i].x ,a[i].y);
}
(1)
int a[]={1,2,3,4,5}; //OK
(2)
int a[5];
a={1,2,3,4,5};
//ERROR
结论:对于数组用大括号{}的赋值方式只是在定义的时候适用
否则必须用循环的方式
结构体初始化(方法一)
using
namespace std;
struct S{
int i;
float f;
};
struct S
s={10,15.5};//使用{}的正确方式
如果改成
struct S
s;
s={10,15.5};就不行
方法二(通行的方法)
从Ucos_ii.c内核代码中学到的
OS_MemClr((INT8U
*)&OSTCBTbl[0],sizeof(OSTCBTbl));Clear all the
tcb
下面是给结构体数组清零的函数,实质是将结构体占据的内存区域视为字符变量区域
,用循环对单个内存字节单元的清零来实现对结构体占据的内存区域即(结构体)的清零
void
OS_MemClr (INT8U *pdest, INT16U size)
{
while (size > 0) {
*pdest++
= (INT8U)0;
size--;
}
}
注意函数OS_MemClr中的强制类型转换 INT8U
(*)&OSTCBTbl[0],
目的是将结构体指针转化成字符型指针,对单个内存单元的清零(*pdest++ =
(INT8U)0;),来完成对结构体的清零(或者是结构体数组)
</max;i++)
</max;i++)
</endl;
</max;i++)
</max;i++)
C语言 如何初始化指针数组 比如char dd[5]
short i;
for(i=0;i<5;i++)
{
dd[i] = (char *)malloc(sizeof(char));
}
char *dd[5]={NULL};
char 指针,也就是char *类型。 其初始化本质上与其它变量初始化没有什么区别,就是赋予其一个初始化的值。
对于指针来说,在C语言中,就是一个地址。区分初始化情况,有四种表象:
1 初始化为空。即
char * str = NULL;
的形式,NULL在C语言中是特定的空指针,其值为0.在C语言中,以NULL作为指针的一个未生效状态,其本身是一个非法的地址值。
2 初始化为常量字符串地址。
char * str = "test";
常量字符串在运行时会被放在常量空间中,于是这样初始化后,地址是常量空间中的一个地址,对于该地址只能读取,不可写入。即str的值可以改,但是str指向的值是不可修改的。
3 初始化为变量地址。
这里的变量地址,包括全局变量,局部变量的地址,以及通过动态分配申请到的内存地址。
这种情况下,对指针指向的空间是可以修改的。
4 不做初始化。
这种情况在C语言中是允许的。如果为全局变量或静态局部变量,系统默认初始化为0值,即NULL。而对于局部变量,将是一个随机值。所以如果是局部变量不做初始化,在取其指向空间值前,必须为其指定一个合法的值,否则访问会出错。
如何创建指向字符串变量的指针数组及初始化?
1、在运行命令中输入”char *str[]={"Hello","C++","World"}“。
2、按照步骤运行命令:#include
,#include
,void main(){char *str[] = {"Hello", "C++", "World"}。char **p;for(p=str; p
<str+3; p++)puts(*p); }
指针数组是指在C语言和C++语言中,数组元素全为指针的数组。
指针数组可以作为函数的参量使用,使用方式与普通数组类似。
指针数组常适用于指向若干字符串,这样使字符串处理更加灵活方便。
c++指针数组初始化问题
int
*p1[]={1,2}这样定义是有二义性的,所以不可以。对于char
*p[]={"aaa","bbb"};是唯一的一个意思就表示char
p[2][3];
而对于int
*p1[]={1,2}而言,他存在了二义性,他既可以表示int
p1[2][0],即p1[0][0]=1,p1[1][0]=2也可表示为int
p1[n][2],即:p1[0][0]=1,p1[0][1]=2;
注:只要记住指针数组其实就相当于一个二维数组就好办了
char
*p[]={"aaa","bbb"};是定义字符型的指针数组,含有两个字符指针,字符型指针的初始化可以允许在定义时候直接赋值,意思是使指针指向"aaa"和"bbb"
两个字符串的空间,而int
*p1[]={1,2},指向整型数的指针不能这样初始化
指向整型数的指针数组
int
*p1[]
=
{NULL,
NULL};
是没有问题的。原因在于,你申请指向字符的指针数组,数组中的元素是字符串,指针数组保存的是字符串首地址;而对于其他常量,你无法把地址给回,自然无法给指针数组赋值。而我给的NULL是一个空指针,就可以赋给指针数组了。
指针数组,元素只能保存指针