1.什么是指针数组? 答: 是一个数组,用来存储指针的数组就叫指针数组,数组里面的元素都是指针 int *p[3] 表示定义了一个可以存三个int指针的数组, 赋值:int a1=1,a2=2;a3=3; int *p[3]={&a1,&2,&3}; 取值 *p[0] p[0]=p1; p[1]=p2; p[2]=p3 ;
2.什么是数组指针? 表示一个指针,而这个指针类型是数组 int (*p)[3] 表示这是一个含有三个元素的int数组的指针 赋值:int arr[3]={1,2,3} ; int (*p)[3]=&arr ;
3.什么是数组元素的指针?
表示一个指针,而这个指针存的是数组一个元素 的地址, int arr[1]={1},i nt *p =&arr[0]; int arr[3]={1,2,3};
int *p=arr; int a=*p; file:///var/folders/7s/53j_mjm930s7x181zrnk6r3c0000gn/T/WizNote/b1671f48-b452-4020-9017-74d99bb0f093/index_files/b0d5f9e1-bc35-41ca-bafa-499d2778810d.png
// a=*(p+1) 等效于 : int * p1=&arr[1] ; a=*p1 ???
4.有什么特点: 1, 数组名表示第一个元素的地址,&数组名表示整个数组的地址,二者值相同,但意义不同 2. 指针可以运算,但仅限于加减运算,运算的实质就是地址运算,即地址的移动. 3.地址(+1)向高位移动,而(-1)向低位移动,不同指针类型移动一位,加1或减1的字节数不同, 指针不受 4. 实际移动的字节数看指针类型,类型占多少个字节,一位就移动多少个字节. 如何看类型, 结合优先级,变量类型 去掉变量名就是int 类型 , 指针类型 去掉星星.
int arr[3]=[3,4,5};
int *p=arr; // 表示数组元素的指针(首元素) int (*parr)[3]=&arr; // 整个数组的地址 int *arrp[2]={&arr[0],&arr[1]}; int temp=*(arrp[0]); // 取a[0]的地址 为3 printf("%d\n",temp);
file:///var/folders/7s/53j_mjm930s7x181zrnk6r3c0000gn/T/WizNote/b1671f48-b452-4020-9017-74d99bb0f093/index_files/a38ec688-1ca4-4822-b39f-f2626e1fbdb1.png
5.什么是二维指针数组? 答:是一个数组,里面的每一个子数组存的元素的类型是指针. int *pa=&a ,*pb=&b, *pc=&c, *pd=&d,*pe=&e,*pf=&f ;
int *p[2][3]={{pa,pb,pc},{pd,pe,pf}} int *ptemp=p [1][1]; printf("pe=%p,ptemp=%p\n",pe,temp); p[1][1]
6.什么是二维数组的指针? 答:是一个指针,只是指针类型是二维数组
int arr[2][3]={{1,2,3},{4,5,6}}; int (*p)[2][3]=&arr // 这就是一个二维数组的指针
6. 指针与字符串 堆区存储用户手动申请的内存数据,如果用户不释放会一直存在,容易内存泄露.
a.怎么表示一个字符串? char arr[]="heima";
b.怎么表示一个字符串数组? char arr[2][6]={"itcast","heima"};
c.怎么用指针表示一个字符串数组? char *arr[2]={"itcase","heima"};
7.有什么特点? d.指针定义的字符串是常量,不能被改变,而字符数组定义的是变量,可以被改变. e.指针定义一个字符串,指针存的实际是在常量取的那个字符串的首字符的地址. file:///var/folders/7s/53j_mjm930s7x181zrnk6r3c0000gn/T/WizNote/b1671f48-b452-4020-9017-74d99bb0f093/index_files/8aaff5fd-ae6f-4e12-ac72-7525fd791b5f.png
file:///var/folders/7s/53j_mjm930s7x181zrnk6r3c0000gn/T/WizNote/b1671f48-b452-4020-9017-74d99bb0f093/index_files/f4b2e27a-fbe5-404e-a007-23f817d9e75d.png
常量区的常量与变量区别?
答; 常量区的常量只有一份,也就是重用的时候,用的都是同一个,地址一样. 1.而变量同一个字符串,不同的变量地址 2.指针定义一个字符串,指针存的实际是在常量区的那个字符串的首字符地址. 3.指针定义的字符串是常量,不能被改变,而字符数组定义的是变量,可以被改变.
8.什么是指针型函数? 答:这个函数的返回值类型是指针 定义:类型*函数名(参数){return 指针类型}
如: int * add(int *a) {return &a} 表示定义了一个返回值是int指针类型的add函数.
9. 什么是函数指针? 函数也会在内存开辟一块空间,函数指针即这块空间的地址.
10.有什么特点? 1.函数指针做加减运算可以,没有什么意义. 2.函数指针可以当作参数传递,因为是一个指针类型. 3.不管什么类型的指针,只要是指针,其里面存的就是地址. file:///var/folders/7s/53j_mjm930s7x181zrnk6r3c0000gn/T/WizNote/b1671f48-b452-4020-9017-74d99bb0f093/index_files/67f067af-137c-43ec-8036-c4bf28e825a2.png
|