- int a=10,b=20;
- 写一个函数,在函数中将a的值改变为b
#include <stdio.h>
void changeAToB(int *ptr,int value)
{
//
*ptr=value;
}
int main(void)
{
int a=10,b=20;
printf("a:%d b:%d\n",a,b);
changeAToB(&a,b);
printf("a:%d b:%d\n",a,b);
return 0;
}
- int a=10,b=20
- int *ptr=&a;
- 写一个函数,在函数中使指针ptr等于(指向)NULL
#include <stdio.h>
//*qtr--->ptr
void changePtrToNULL(int **qtr)
{
*qtr=NULL;
}
int main(void)
{
int a=10,b=20;
int *ptr=&a;
printf("&a:%p ptr:%p\n",&a,ptr);
//ptr=NULL;
changePtrToNULL(&ptr);
printf("&a:%p ptr:%p\n",&a,ptr);
return 0;
}
- int a=10,b=20
- int *ptr=&a;
- 写一个函数,在函数中使指针ptr指向b
#include <stdio.h>
//btr存放main:b变量地址
void changePtrFormAToB(int **qtr,int *btr)
{
*qtr=btr;
}
int main(void)
{
int a=10,b=20;
int *ptr=&a;
printf("a:%d b:%d *ptr:%d &a:%p &b:%p ptr:%p\n",a,b,*ptr,&a,&b,ptr);
//ptr=&b;
changePtrFormAToB(&ptr,&b);
printf("a:%d b:%d *ptr:%d &a:%p &b:%p ptr:%p\n",a,b,*ptr,&a,&b,ptr);
return 0;
}
- int a=10,b=20
- int *t=&a,*r=&b;
- 写一个函数,在函数中使指针t指向b,指针r指向a
#include <stdio.h>
//*x==>t *y===>r
void swap(int **x,int **y)
{
int *temp;
temp=*x;
*x=*y;
*y=temp;
}
int main(void)
{
int a=10,b=20;
int *t=&a,*r=&b;
printf("&a:%p &b:%p\n",&a,&b);
printf("t :%p r :%p\n",t,r);
swap(&t,&r);
printf("t :%p r :%p\n",t,r);
return 0;
}
- 根据下面给出的声明和数据,对每个表达式进行求值并写出它的值。假定ints数组在内中的起始地址为100,整型长度是4个字节和指针长度是8个字节。
int ints[20]={10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200};
int *ip = ints + 3;
表达式 值 表达式 值
ints 100 ip 112
ints[4] 50 ip[4] 80
ints+4 100+4*4 ip+4 112+4*4
*ints+4 10+4 *ip+4 40+4
*(ints+4) 50 *(ip+4) 80
ints[-2] 未知 ip[-2] 20
&ints 100 &ip 未知
&ints[4] 116 &ip[4] 112+16
&ints+4 100+4*80 &ip+4 未知
&ints[-2] 92 &ip[-2] 104