【C】指针的基本知识点
一、定义
(1) int *p=&number;
(2)int *p; p=&number;
p:代表首地址
*p:代表首地址的值
二、赋值
int *p,*p1;
p=p1;
(1)指针可以和普通变量一样正常赋值,但是要相同类型才可
(2)指针变量指向数组首地址,可以像数组一样通过[]来访问数组每个元素
strPtr=message;
for(i=0;i<strlen(message);i++)
{
printf("%c",strPtr[i]);
}
三、函数
char* test(char *str) //*str与str[]等价
{
int i;
//char array[10]={0};局部变量
char *array=(char *)malloc(sizeof(char)*20);
memset(array,0,20);//初始化,内存清空函数
for(i=0;i<strlen(str);i++)
{
printf("%c",str[i]);
}
printf("\n");
strcpy(array,str);
printf("array=%s\n",array);
return array;
}
注意:
(1)可以把指针作为函数返回值,但是绝对不能把函数里面的局部变量的地址返回给外面
(2)返回后局部数组变量都会被销毁
(3)如果一定要返回地址,要自己开辟内存空间,使用malloc函数,默认返回是viod*
(4)调用这个函数记得初始化里面的数据,而且使用完记得销毁free,否则会地址泄露 free(p_str);
四、结构体数组
将结构体指针最为返回值,与上述函数相同,记得释放空间
typedef struct
{
int age;
char name[20];
}PACK_T;
PACK_T* structTest(PACK_T *pack_t)
{
PACK_T *temp=(PACK_T *)malloc(sizeof(PACK_T));
memset(temp,0,sizeof(PACK_T));
pack_t->age=28;
strcpy(pack_t->name,"chen");
memcpy(temp,pack_t,sizeof(PACK_T));//内存块的复制
/*temp->age=29;
strcpy(temp->name,"fhjd");*/
return temp;
}