C中指针变量何时需要初始化mallocC中定义:char *p, *np;temp[10];strcpy(temp, "abc def");...p = temp;使用np = strtok(p, " ");...请问这里有问题么?为什么此处对于p或np就不用malloc分配个空间?谢谢指点!是否需

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/16 04:35:16

C中指针变量何时需要初始化mallocC中定义:char *p, *np;temp[10];strcpy(temp, "abc def");...p = temp;使用np = strtok(p, " ");...请问这里有问题么?为什么此处对于p或np就不用malloc分配个空间?谢谢指点!是否需
C中指针变量何时需要初始化malloc
C中定义:char *p, *np;
temp[10];
strcpy(temp, "abc def");
...
p = temp;
使用np = strtok(p, " ");
...
请问这里有问题么?为什么此处对于p或np就不用malloc分配个空间?谢谢指点!
是否需要为每个声明的char*指针变量先赋个初值,例如char *p = NULL;?

C中指针变量何时需要初始化mallocC中定义:char *p, *np;temp[10];strcpy(temp, "abc def");...p = temp;使用np = strtok(p, " ");...请问这里有问题么?为什么此处对于p或np就不用malloc分配个空间?谢谢指点!是否需
首先你要明白什么是指针,指针是用来操作内存的.那么指针又如何操作内存呢?在C语言里可以定义指针变量,这个指针变量里可以存储内存的地址,一个32位的无符号整型值.它就像普通的int, double型变量一样.以下面为例说明:
int iMax = 1;
int * pMax = NULL;
我们定义了一个int型的变量iMax 和一个int型的指针变量pMax,并对他们进行了初始化.这里iMax的值为1; pMax的值为NULL,也就是一个无符号整形0.注意NULL是一个宏,代表0.现在pMax的值为NULL,一般来讲0也是一块内存地址, 我们也可以操作.注意这个NULL你现在认为他表示无效即可.用来给指针进行初始化.其它的先不用管.
现在我们来使用pMax, 如果要使用pMax, 那么就要对pMax赋值,使它指向一块内存.我们这里定义指针的类型为一个指向一个int型值的指针变量.所以可以将iMax的地址赋值给pMax.注意,不管什么样的类型的指针变量,其值都是一个unsigned int型的值,表示内存的地址.理解这一点很重要.为什么需要定义指针所指向的类型呢.如 char *, int * , double *型的指针,原因是我们使用指针是为了操作存储在内存中的特定类型的值.如果没有定义指针的类型,那我们在操作内存时,只能一个字节, 一个字节使用.这样的指针没有什么意义,也许你还不太理解.但多应用就能明白这一点.
现在我们来给pMax赋值,然后操作它.
pMax = &iMax;
好了,可以使用pMax了.就像使用iMax一样用它.不过你得在它前面加个指针运算符'*';
*pMax = *pMax + 2;
现在的pMax指针变量中存储的是iMax变量地址的值.对*pMax操作, 就是对iMax操作.现在*pMax = 3 , iMax = 3;
如果说我临时需要一块内存,这块内存用来存储n个int的变量.我就需要使用malloc为pMax分配一块内存.可以这样做:
pMax = malloc(sizeof(int) * n);
if (pMax == NULL) // 错误处理
{ TODO...}
这样我们就为pMax分配了一块内存大小为sizeof(int) *n 字节的内存.这里malloc返回一个指向这块内存的首地址并将它赋给了int型指针变量pMax.
好了,pMax已经可以使用了.我们需要对它进行初始化.这个可以使用memset函数
memset(pMax, 0 , sizeof(int) * n);
现在就可以像数组一样操作这块int型的内存了.
pMax[0] = iMax;
pMax[1] = iMax + 1;
pMax[2] = pMax[0];
...
总的来说,指针非常灵活.因为它可以直接操作内存.这就会使指针这个东西很不容易控制.
像你说的p = temp ;将数组的首地址赋值给p , 这样只是为了更容易操作字符串.temp也表示字符串的首地址, 但他是一个不可改变的量,即不能对temp赋值,它是只读的.指针p就不同了,他可以进行一些数学运算.
对一个程序来讲,如果你临时需要一块内存来存储数据,你可以使用malloc, 但记得要free.否则容易造成内存泄露.
就这些吧. 希望对你有用.写这么多也不容易,给点分吧.^_^

C中指针变量何时需要初始化mallocC中定义:char *p, *np;temp[10];strcpy(temp, abc def);...p = temp;使用np = strtok(p, );...请问这里有问题么?为什么此处对于p或np就不用malloc分配个空间?谢谢指点!是否需 已知P是指针变量,则不能初始化指针的值是 A NULL B 1 C 地址 D 0 定义指针变量时,必须将指针变量初始化为NULL(为空),否则,指针变量会由于初始化位置的不确定,而成为野指针.这句话中‘由于初始位置不确定,怎么会的 指针变量初始化为NULL什么意思1.为什么指针变量定义时一定要初始化?2.指针变量初始化为NULL是什么意思? 指针变量的作用(C语言)C语言中指针变量的作用是什么?如何深刻理解?求救! 变量初始化失败//英语翻译 为什么C语言函数中可以返回局部变量而不能返回局部变量的指针? 关于指针,下列说法错误的是?1.指针根据其所指向变量的类型的不同,其所占用内存大小也不同2.指针中存放的实际上是内存单元的地址3.可以在指针定义的同时对其进行初始化4.相同类型的指 C语言指针基本概念及其指针变量的定义是什么 C语言中当我定义了一个指针变量的同时,是否就为这个指针变量开辟了一个空间 C.指针变量中存放的是某个数据对象的值 错在哪里? 在C语言中,指针变量有什么实际的作用? 用C语言在主函数中定义和初始化一个二维数组a[3][4]和一个指针数组,采用指针数组去访问数组元素a[2][4]; 用C语言在主函数中定义和初始化一个二维数组a[3][4]和一个指针数组,采用指针数组去访问数组元素a[2][4] 5.下列的描述中( )是错误的.(a) 使用全局变量可以从被调用函数中获取多个操作结果(b) 局部变量可以初始化,若不初始化,则系统默认它的值为0(c) 当函数调用完后,静态局部变量的值不会消失( 关于指针变量的引用,下列说法中错误的是( )A.“指针变量”可以出现在赋值表达式的左边,也可以出现在右边B.“$指针变量”可以出现在赋值表达式的左边,也可以出现在右边C.指针变量的 C语言中指针在编程中有什么作用?不知道指针除了访问变量地址,给变量进行传址交换这些作用外,在实际程序中有什么作用. C语言结构指针和结构变量名分别是什么意思?