c菜鳥問關於scanf的問題?

时间:2022-04-17 16:04:33
....
int a;
scanf("%d",&a);
...
其中的&a不是取a的地址嗎,怎麼用&符號呢,應該是從鍵盤錄入一整數,把它賦值給a,為什麼賦值給&a呢,該怎樣理解?

我是菜鳥,別笑我:)

另外附加一問題,買一送一,嘿嘿
int strlen(char *str)
{
......
}
void main()
{
.....
char string[100];
int len;
...
len=strlen(string);
...
}
其中的調用strlen函數時,對於參數是否應該這樣理解
char *str=string
而不時 str=string,對嗎?

8 个解决方案

#1


scanf( )是传地址的。

考虑

void add(int n)
{
++n;
}

void add2(int *n)
{
++*n;
}

int p=0;
add(p);//执行后p=0;
add2(&p);//执行后p=1;


就是这个区别,
传地址过去才能改变实参的值,
传值过去的话,
实际上相当于
void add(int n)
{
int q=n;
++q;
}

scanf不是赋值,
而是直接对变量操作。



size_t strlen( char *str );//函数原型str是新定义的局部指针变量,把string存的地址值传给str

#2


其中的調用strlen函數時,對於參數是否應該這樣理解
char *str=string
而不時 str=string,對嗎?
//不对,应该是str=string(单纯的值传递,这里的值指的是指针,即地址的值)
如果你想在函数中试图改变指针,也是没有用的。

#3


scanf("%d",&a);
//=========================

呵呵,取地址是合理的,在机器内部是通过地址调用来取值,这个句语就是把你写入的a的值存入到a对应的地址中.
不知道是不是好理解一些?

其中的調用strlen函數時,對於參數是否應該這樣理解
char *str=string
而不時 str=string,對嗎?
//==================================

int strlen(char *str)从这个函数的参数来看(在函数中只有str是函数的参数),它要求的是一个指针型变量,这是对的吧,而指针就是一个地址,对应于数组来说,数组名就是一个地址,所以它们之间是匹配的.

至于char*只是一个类型表示,说明str是一个char型指针(即函数所能接受的变量),也是函数所能接受的变量类型,因此str是和string的变量类型是一至的,所以string可以做为此函数的参数.

#4


scanf("%d",&a);
//=========================

呵呵,取地址是合理的,在机器内部是通过地址调用来取值,这个句语就是把你写入的a的值存入到a对应的地址中.
不知道是不是好理解一些?

#5


路过

#6


#7


输入项首地址表──由若干个输入项首地址组成,相邻2个输入项首地址之间,用逗号分开。

输入项首地址表中的地址,可以是变量的首地址,也可以是字符数组名或指针变量。

 

变量首地址的表示方法:  &变量名

 

其中“&”是地址运算符

#8


scanf()函数要的就是地址

#1


scanf( )是传地址的。

考虑

void add(int n)
{
++n;
}

void add2(int *n)
{
++*n;
}

int p=0;
add(p);//执行后p=0;
add2(&p);//执行后p=1;


就是这个区别,
传地址过去才能改变实参的值,
传值过去的话,
实际上相当于
void add(int n)
{
int q=n;
++q;
}

scanf不是赋值,
而是直接对变量操作。



size_t strlen( char *str );//函数原型str是新定义的局部指针变量,把string存的地址值传给str

#2


其中的調用strlen函數時,對於參數是否應該這樣理解
char *str=string
而不時 str=string,對嗎?
//不对,应该是str=string(单纯的值传递,这里的值指的是指针,即地址的值)
如果你想在函数中试图改变指针,也是没有用的。

#3


scanf("%d",&a);
//=========================

呵呵,取地址是合理的,在机器内部是通过地址调用来取值,这个句语就是把你写入的a的值存入到a对应的地址中.
不知道是不是好理解一些?

其中的調用strlen函數時,對於參數是否應該這樣理解
char *str=string
而不時 str=string,對嗎?
//==================================

int strlen(char *str)从这个函数的参数来看(在函数中只有str是函数的参数),它要求的是一个指针型变量,这是对的吧,而指针就是一个地址,对应于数组来说,数组名就是一个地址,所以它们之间是匹配的.

至于char*只是一个类型表示,说明str是一个char型指针(即函数所能接受的变量),也是函数所能接受的变量类型,因此str是和string的变量类型是一至的,所以string可以做为此函数的参数.

#4


scanf("%d",&a);
//=========================

呵呵,取地址是合理的,在机器内部是通过地址调用来取值,这个句语就是把你写入的a的值存入到a对应的地址中.
不知道是不是好理解一些?

#5


路过

#6


#7


输入项首地址表──由若干个输入项首地址组成,相邻2个输入项首地址之间,用逗号分开。

输入项首地址表中的地址,可以是变量的首地址,也可以是字符数组名或指针变量。

 

变量首地址的表示方法:  &变量名

 

其中“&”是地址运算符

#8


scanf()函数要的就是地址