C语言-指针与取地址符问题

2025-05-16 12:13:06
推荐回答(4个)
回答1:

scanf及fscanf、sscanf等函数的原理是将数据读入到以某个内存地址为起始的长度为格式控制字符串给定的数据类型长度对应的连续内存空间内。例如scanf("%d",0x401040)代表从输入流中读取一个整型数,并将它保存到内存地址0x401040开始的相当于int型长度的内存空间内(x86上为4个字节)。因此,对于整型变量a来说,应该用scanf("%d",&a)代表将数据读入并保存到a对应的地址空间内。这是&stu[i].grade前面为什么需要取地址符&的原因。而对于char id[10]来说,id是一个char型数组名同时也是指向该数组首元的指针名,即id是一个char*型指针。而我们都知道指针本身保存的就是内存地址的值,因此直接用scanf("%s",id)就可以将一串字符读入id所指向的内存空间内。注意前面的格式控制符%s代表一个不含空白符号的字符串。

回答2:

1
第一图p是指针
第二图p是数组,数组中存放指针

2
a[3][5]中的a[0]相当于一个整型数组tmp[5]
那么
没有&表示tmp数组首地址
有&表示tmp数组中第一个元素的地址

说说为什么正常使用,因为巧合
你的机器以及编译器也就是所谓的环境,这种环境下指针占4个字节,int也占4个字节,所以对于有&与否的情况,做算数运算得到的地址结果是一样的!

你可以把数组声明改成double试试,应该就不正常了

回答3:

你好!!
1.地址就像你家的地址一样,指针变量存放的就是你家的地址,要想到你家,必须找到存放你家地址的变量(针对指针而言),那就是指针。
2.要是变量是整型不是字符串数组名,那就的带取地址符!!!
3.& 是取地址符的,(但还有位于运算),要是需要变量的地址就要加取地址符。

不理解,我们在交流!!!

回答4:

比如说我看到网上的
MYSQL mysql;
mysql_init(&mysql);
MYSQL_STMT *stmt;
stmt = mysql_stmt_init(&mysql);
同样MYSQL和MYSQL_STMT都是结构体,为什么一个加*,另一个不加*

还有char *a;是申明的指针变量,为什么用的时候不用&a,而是直接用a呢