1.sizeof 与 字符数组的大小
#include <iostream>
using namespace std;
int main()
{
char * str1= "0123456789";
// char * str1= "0123456789";的等效写法如下
char str11[] = "0123456789", *str111;
str111 = str11;
char str2[] = "0123456789";
char str3[100] = "0123456789";
printf("%d\n", sizeof(str1)); // 4
printf("%d\n", sizeof(str2)); // 11
printf("%d\n", strlen(str2)); // 10
printf("%d\n", sizeof(str3)); // 100
}
数组所占用内存的大小:定义的类型所占的字节数 X 数组长度 。
字符数组所占用空间:结尾自动补‘\0’,所占用内存字节数+1。【参考链接】
2. 指针域字符数组[参考链接]
#include <iostream>
using namespace std;
char * GetMemory()
{
char pBuf[] = "hello!";
return pBuf;
}
int main()
{
char *str = NULL;
str = GetMemory();
printf("%s\n", str);
return 0;
}
会出现乱码,编译错误
3.指针变量未初始化
#include <iostream>
using namespace std;
int main()
{
int *ptr;
*ptr = 1234;
printf("%d\n", *ptr);
return 0;
}
4.请写出函数指针,函数返回指针
指针可以指向一个变量,也可以指向一个函数,当然也可以通过指针调用指向的函数。
(1)定义指向函数的指针变量 : 数据类型 (* 指针变量名)() ; 例如 int (*pf)();
(2)指向函数,然后调用欧冠:(* 指针变量名)(参数) ;例如 sum= (*pf)(2,3);
void (*fun)(参数) //函数指针
void * fun() //函数返回值指针
5.使用 malloc时 的错误 。【参考链接】
#include <iostream>
using namespace std;
typedef struct _data_t{
char name[20];
int value;
}data_t;
int main()
{
data_t * pData;
pData = (data_t *)malloc(sizeof(data_t));
return 0;
}
错误原因:
malloc申请内存后没有检测返回值。因为当
无法获得符合要求的内存块,malloc函数会返回NULL,因此在调用malloc动态申请内存块时,一定要进行返回值的判断,否则容易出现内存泄露。