c语言指针用常量初始化,C中指针变量何时需要初始化mallocC中定义:char *p, *np;temp[10];strcpy(temp, "abc def");...p = temp;使用np =...

首先你要明白什么是指针,指针是用来操作内存的.那么指针又如何操作内存呢?在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.否则容易造成内存泄露.

就这些吧. 希望对你有用.写这么多也不容易,给点分吧.^_^

解析看不懂?求助智能家教解答查看解答

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值