1. 指针是什么
是一个能存储地址的数据类型
定义: 类型 * 指针名
赋值: 指针变量名= 指针(地址) 注意,指针获取方法( &变量名)
2.特点:
指针本身也是地址,指针定义之后,自身地址不变,但里面的存的地址可以变化.
&p表示指针自身地址,而p表示指针存的地址.*p表示指针所存地址的内存空间.
3. int *p2; int *p3[3]; 这里的*p3[3]是什么意思?
答: 所表示的是一个由三个指向int型变量的指针变量所组成的数组,数组里面的每一个元素存储的都是指针.
4. int *a[3] 理解思路
int *a; // 定义了一个指针变量a指向int类型的变量
int *a[3]; // 定义一个a[3]指向int类型的变量,a[3]是数组,所以里面可以存放3个指针,所以int *a[3]是指针数组
5.指针里存的实际是什么?
答:地址
6. 指针本身有地址吗?
答: 指针变量也是变量,变量就有地址.
7. 指针占几个字节?
答: 由操作系统决定,如是32位,占字节数为4,64位占8个字节.
8. 如何取指针里的数据?
答: *p
5.一个类型的指针可以存不同类型的地址吗?
答:不可以
int
a=100;
int
*p1=&a;
int
**p2=&p1;
//
printf("变量定义如下:\n");
printf("int
a=100:\n,int *p1=&a:\n,**p2=&p1:\n\n");
printf("&a=%p\n",&a);
// 0x7fff5bd5ac08
printf("&p1=%p,p1=%p\n",&p1,p1);
//0x7fff5bd5ac00 ,p1=0x7f5ac08
printf("&p2=%p,p2=%p\n\n",&p2,p2);//
0x7ff5bd5abf8,p2=0x7fff5bd5ac00
printf("**p2=%d,*p1=%d\n",**p2,*p1);
// 100, 100
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;
4.有什么特点:
1, 数组名表示第一个元素的地址,&数组名表示整个数组的地址,二者值相同,但意义不同
2. 指针可以运算,但仅限于加减运算,运算的实质就是地址运算,即地址的移动.
3.地址(+1)向高位移动,而(-1)向低位移动,不同指针类型移动一位,加1或减1的字节数不同, 指针不受
4. 实际移动的字节数看指针类型,类型占多少个字节,一位就移动多少个字节.
如何看类型, 结合优先级,变量类型 去掉变量名就是int 类型 , 指针类型 去掉星星.
常量区的常量与变量区别?
答; 常量区的常量只有一份,也就是重用的时候,用的都是同一个,地址一样.
1.而变量同一个字符串,不同的变量地址
2.指针定义一个字符串,指针存的实际是在常量区的那个字符串的首字符地址.
3.指针定义的字符串是常量,不能被改变,而字符数组定义的是变量,可以被改变.
8.什么是指针型函数?
答:这个函数的返回值类型是指针
定义:类型*函数名(参数){return 指针类型}
如: int * add(int *a) {return &a}
表示定义了一个返回值是int指针类型的add函数.
9. 什么是函数指针?
函数也会在内存开辟一块空间,函数指针即这块空间的地址.
10.有什么特点?
1.函数指针做加减运算可以,没有什么意义.
2.函数指针可以当作参数传递,因为是一个指针类型.
3.不管什么类型的指针,只要是指针,其里面存的就是地址. |
|