- 在下列程序代码中,声明了一个数组指针并指定了初始值,其方式是否正确? int *p1; int array1[5]; p1=array1;
- 下列提说明是否正确? char* s1=” This is a Key”;//声明字符串指针 char *p1; //声明指针变量
- 利用简单的文字来解释,下列的变量所代表的意思。 int *ptr0; int *ptr1=2000; int*ptr2=NULL;
- 有一个变量val,若指导它的值存在内存地址0*1000中,请问程序代码应该如何编写?并说明程序流程.
- 说明下列程序代码所代表的意义。
- 说明下列程序代码的最后内存地址是什么?并阐述理由.
int *ptr=( int *)1000;
ptr+=3;
ptr--;
- 简单说明指针运算的意义与作用。
- 以下程序代码哪一行有错误?试说明原因。 int value=255; int *piVal,*piVal1; float *ppp; piVal=&value; piVal1=piVal; ppp=piVal1;
- 以下程序代码是四重指针的应用,请问***ptr与***ptr的值是什么?并加以说明. int num=1000; int *ptr1=# int **ptr2=&ptr1; int ***ptr3=&ptr2; int ****ptr4=&ptr3;
- 以下程序代码是否有错?请加以说明. int arr[10],value=100; int *ptr=&value; arr=ptr;
- 如何求得一维数组折长度大小?
- 什么是指针数组?
- 说明内存泄漏(Memort Leak)的意义.
- 动态内存分配(Dynamic Allocation)的意义是什么?在C语言中,有哪些函数可以在程序执行期间动态分配与释放内存空间?
- 写出动态分配整数二维数组ppiArrVal[2][3]的释放程序代码。
C语言指针测试题(3)
正确
正确
int*ptr0;:声明一个动态内存变更,但没有直接配置真实内存空间。int*ptr1=2000;:声明一个动态内存变量,且直接配置内存地址2000给变量。int*ptr2=NULL;:声明一个动态内存变量,并配置一个空的内存空间,但还没有真实的内存空间。
int val=5; //声明一个int数据类型的val变量
int*ptr3=(int*)0*1000; //声明一个内存地址为0*1000的变量
ptr3=&val; //将val变量的地址指定给指针变量 ptr3
声明一个int类型的动态变量,并配置一个新的int数据长度的内存空间让变量业使用。
int *ptr=(int *)malloc(sizeof(int));
1008。最初的内存地址为1000,“ptr+=3”是将内存地址往后取3个int数据长度,int数据长度为难个字节,所以一共移动了12个字节,现在的内存地址为1012,而“ptr--”往前移动了个字节,所以量后停留的内存地址为“1008”。
指针变量虽然是一种用来存储地址值的变量,但也可以针对指针使用“+”运算符或“-”运算符来进行运算,不过运算结果与一般变量大不相同。事实上,当对指针变量使用这两个运算会时,并不是进行一般变量的加法或减法运算,而是用来增减内存地址的偏移量,而移动的基本单位则视所声明的数据类型面定。
第06行,因为一旦确定指针所指向的数据类型,就不能再更改了。另下指针变量也不能指向不同数据类型的指针变量。
皆为1000
03行有错,因为数组可以直接当成指针常来运算,而数组名地址是是数组第一个元素的地址。不过由于数组的地址是只读的,因此不能改变其值,这点是和指针变量最大的不同。
数组长度=sizeof(数组名)/sizeof(数组名[0])。
指针也可以像其他变量一样,声明成数组方式,称为指针数组。每个指针数组中的元素都是一个指针变量,而元素值则为指向其他变量的地址值。
如果在程序执行期间配置的内存未释放,将会造成内存空间浪费,形成所谓的内存泄漏(Memory Leak),这种情况对于有些需要一次使用大量内存的程序,将有可能无法执行或导致系统动作越来越缓慢等情况发生。
所谓动态内存分配(Dynamic Allocation),是指在程序执行过程中,才提出配置内存的要求,主要的目地是让内存运用更为灵活。从程序本身的角度来年,动态分配机制可以在程序执行的时候再进行数据声明。在C语言中,可以分别使用malloc()与free()函数在程序执行期间动态分配与释放内存空间,这两个函数定义在头文件中。其中mallo()函数会根据所要求的内存大小,在内存中配置足够的空间,并传给所配置内存的指针值,也就是内存地址。
1)配置
int**ppiArrVal=(“int**”)malloc(2*sizeof(int*));
ppiArrVal[0]=(int*)malloc(3*sizelf(int));
ppiArrVal[1]=(int*)malloc(3*sizelf(int));
2) 释放
free(ppiArrVal[0]);
free(ppiArrVal[1]); /*第二维数组内存释放完毕*/
free(ppiArrVal); /*第一维数组内存释放完毕*/
自我评价 答对0--2题 答对3--4题 答对5--6题 答对7--8题 答对9--10题
