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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© flywithde 中级黑马   /  2015-8-3 09:19  /  485 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、指针的基本用法
int main(){
//指针:指针即为地址;指针变量:存放变量地址的变量

//一级指针
int a = 34,b = 44;
int *p = &a;//定义一个指针变量,存的是变量a在内存中的地址
printf("%d",*p);//输出34;
*p = 300;//*p表示,存或取指针变量p中存放的内存地址所对应的内存空间中的内容
printf("%d",*p);//输出300
p = &b;//将b的地址赋值给指针变量p ,这时p中存放的是变量b的地址
printf("%d",*p);//输出44
//二级指针:存放指针变量的地址的指针变量
int **p1 = &p;
printf("%p",*p1);//输出指针变量p中存放的地址
printf("%d",**p1);//输出44,此时**p1 等于*p
注意:若指针变量没有初始化称为野指针,可能会造成系统崩溃
return 0;
}

2、用数组名遍历二维数组中的每一个元素
void test(){
int a[2][3] = {{1,2,3,},{4,5,6}};
for(int i=0;i<2;i++){
  for(int j=0;j<3;j++){
   //首先a是一个常量,存放的是二维数组a的首地址
   //可以把二维数组a看成是由两个特殊的一位数组a[0]和a[1]组成,a中存放的是二维数组的首地址即a[0]的地址
   //a[0]和a[1]又是一个一维数组,a[0]和a[1]中存放的是两个一维数组的首地址
   //*a即取出a中存放的地址在内存中对应的内容即a[0]的值,而a[0]中存放的又是a[0]这个一维数组的地址
    故*(*a)即取出了a[0]这个一维数组中第一个元素的值
   //(a+i)为二维数组的第i个元素的地址; *(a+i)即为二维数组中第i个一维数组的首地址; *(a+i)+j为二维数组
    中第i个一维数组中第j个元素的地址; *(*(a+i)+j)即为二维数组中第i个一维数组中第j个元素的值
   printf("%d\t",*(*(a+i)+j));
  }
}
}

3、字符串指针
void str(){
//字符串指针的定义
char *str = "this is a string";
//注意:"this is a string" 这个字符串是一个常量

//不能直接用字符串指针变量接受键盘输入的字符串。因为字符串指针是用来存放地址的;字符串指针变量在定义的时候
  没有给指针所指向的地址分配内存空间,无法存储键盘输入的字符,只有为字符串指针变量所指向的地址划分一定的
  内存空间后才可以用字符串指针变量接受键盘输入的字符串
char *str = null;
//scanf("%s",str);该语句会报错,因为事先没有分配内存空间
str = malloc(100);//为str分配100字节的内存空间
scanf("%s",str);
}

1 个回复

正序浏览
收藏着以后忘了再拿出来看看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马