C语言 * 星号的九种用法

目录

1. 乘法运算符
2. 复合赋值运算符
3. 假读符
4. 注释符
5. 普通符号
6. 指针定义符
7. 指向运算符
8. 行列地址转换符
9. 地址值符
10. 宽度或精度(printf 函数)

1. 乘法运算符
c = a*b;
a = 2, b = 3, c = 2*3 = 6;

2. 复合赋值运算符
i = 5;
i *= 7;
i = 35;

3. 假读符
main(){
	int i, j;
	scanf("%3d%*3d%3d", &i, &j);
	printf("i=%3d, j=%3d\n", i, j);
}
输入:123456789;
输出:i=123, j=789;   中间数字 345 被跳过,称为假读或空读;

4. 注释符
 /* 单行注释 */
 
 /*
 	多行注释
 */

5. 普通符号
符号 “ * ” 同数学运算符 “ × ” ;

6. 指针定义符
int *i, *j;          // 定义了两个指针变量 i 和 j(i,j分别是指向整数类型的指针)
int **p;int** p; // 复合指针,p 是一个指向整型的指针的指针
int(*p)();           // 定义了一个指向函数的指针变量 p,用来保存函数的入口地址,此函数返回整形值
max(int *i, int *j)  // 函数 max() 首部定义了 2 个形参: i 和 j 指针变量
char *string = "Hello world!";  // 定义了一个字符型指针变量 string,用来保存字符串常量的首地址
typedef char *STRING;           // 定义了一个字符指针类型 STRING
struct tag *struct_pointer;     // 定义了一个指向结构体的指针(tag 是结构体标签)
7. 指向运算符

int a = 100;
int *p = &a ;  // p 指向了 a (此处 * 为指针定义符,说明 p 为指针)
x = *p         // 把指针 p 指向的值赋值给 x(此处 * 为指向运算符,*p 表示指针 p 所指向的变量的存储单元)
x = 100;

/* 以下语句中的 * 都是指向运算符 */
if(*a > *b){}
for(; *string; printf("%c", *string), string++){}
(*p).menber-list   // 访问结构体成员(同:p->menber-list)

8. 行列地址转换符

二维数组 a[ i ][ j ] 的数组名 a 前加上星号 “ * ” 使行地址转换为列地址;

a+i         // 第 i 行行地址
*(a+i)      // 第 i 行第 0 列的列地址
*(a+i)+j    // 第 i 行第 j 列的列地址
*(*(a+i)+j) // 第一个“ * ”是指向运算符,指向第 i 行第 j 列所在单元,等价于 a[i][j]

应用实例:

main(){
    int i, j, a[2][4] = {1,2,3,4,5,6,7,8},(*p)[4];
    
    for(i=0; i<2; i++)
        for(j=0; j<4; j++)
			*(*(a+i)+j) = *(*(a+i)+j)+1;
        for(p=a; p<a+2; p++)             // a 是常量不能自加、自减;p 是变量可以自加、自减;
        	for(j=0;j<4;j++)
    			printf("%-2d",*(*p+j));  // p 是数组 (*p)[4] 的行地址,*p 是其列地址
}
outuput:2 3 4 5 6 7 8 9

9. 地址值符

函数名前的星号 “ * ”,表示函数返回一个地址值;

int *locate(){  // 函数 locate() 返回值保存在指针变量 return 中
	......
}

10. 宽度或精度(printf 函数)

在 printf 函数的转换中,使用星号 “ * ” 表示宽度或精度;

main(){
    char *string = "hello world!";  // 此处 * 为指针定义符
    int max = 7;                	// 从字符串 s 中打印最多 7 个字符
    printf("%.*s", max, string);    // 此处 * 表示宽度或精度,由后面参数 max 确定(且该参数必须为 int 类型)
}
output:hello w

参考文献:李金山,张文丽. C语言中*号的九种用法 [J ]. 电脑开发与应用,2006,19(1)
参考文献:(美)Brian W. Kernighan / (美)Dennis M. Ritchie. C程序设计语言 第二版 [M] . 北京:机械工业出版社,2014
参考链接:C语言教程 by RUNOOB.COM

  • 199
    点赞
  • 869
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值