A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jeffdy66 中级黑马   /  2015-11-10 21:47  /  932 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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




2 个回复

倒序浏览
写得不错,上课肯定认真笔记了
回复 使用道具 举报
wh8817221 发表于 2015-11-10 22:17
写得不错,上课肯定认真笔记了

哈哈, 不记这玩意看不透,好记性不如烂笔头
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马