黑马程序员-C语言指针用法

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);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值