在C中打印指针地址[两个问题] [英] Printing pointer addresses in C [two questions]
本文介绍了在C中打印指针地址[两个问题]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我知道我的问题很简单,但谷歌他们并没有给我任何有用的结果......他们可能太简单了!
I know that my questions are very simple but googleing them didn't get me any useful results... They'r probably too simple!!
没有。 1
char* createStr(){
char* str1 = malloc(10 * sizeof(char));
printf("str1 address in memory : %p\n", &str1);
return str1;
}
int main(void){
char* str2 = createStr();
printf("str2 address in memory : %p\n", &str2);
}
结果:
str1 address in memory : 0x7fffed611fc8
str2 address in memory : 0x7fffed611fe8
为什么地址不同于createStr()函数以及如何释放(str1)?
Why are the addresses different in and out of the createStr() function and how can I free(str1)???
没有。 2
int main(int argc, int *argv[]){
printf("Basename is %s ", (char*) argv[0]);
if(argc > 1 ){
printf("and integer arg is : %d.\n", (int) *argv[1]);
}
}
如果我编译并运行 $ ./test 3
,我怎样才能得到int 3?
If I compile and run $ ./test 3
, how can I get int 3?
结果:
Basename is ./test and integer arg is : 1380909107.
推荐答案
评论内联!
没有。 1
#include <stdio.h>
#include <stdlib.h>
char* createStr(){
char* str1 = malloc(10 * sizeof(char));
/* str1 is a local variable which is allocated in
stack and not in heap */
/* But the dynamic memory allocation is done in
heap so malloc returns a portion of memory from
heap and str1 is made to point to that!
*/
/*
aaaa (stack) bbbb (heap)
+--------+ +-+-+-------+-+
| str1 |----->|0|1| ..... |9|
+--------+ +-+-+-------+-+
*/
printf("address of str1 in memory : %p\n", &str1);
/* prints aaaa and not bbbb */
/* to print the base address of the allocated memory,
printf("str1 address in memory : %p\n", str1);
*/
printf("address of the allocated memory inside func : %p\n", str1);
return str1;
}
int main(void){
char* str2 = createStr();
/* str2 is a local variable to main and so it is
allocated in the stack
*/
/*
cccc (stack) bbbb (heap)
+--------+ +-+-+-------+-+
| str2 |----->|0|1| ..... |9|
+--------+ +-+-+-------+-+
*/
printf("address of str2 in memory : %p\n", &str2);
/* the above will print the address of the str2
(which is cccc) but not where it is pointing
to (bbbb) ..
*/
/* So to print the base address of where it is
pointing to (bbbb),
printf("str2 address in memory : %p\n", str2);
*/
printf("address of the allocated memory inside main : %p\n", str2);
}
No 2。
#include <stdio.h>
int atoi(char a[])
{
int i, n=0;
for (i=0 ; a[i] >= '0' && a[i] <= '9' ; i++)
n = 10 *n + (a[i]-'0');
return n;
}
int main(int argc, char *argv[]){
printf("Basename is %s ", (char*) argv[0]);
if(argc > 1 ){
printf("and integer arg is : %d.\n", atoi(argv[1]));
}
}
$ gcc atoi.c -o atoi
$ ./atoi 3
Basename is ./atoi and integer arg is : 3.
$
注意事项:
- wrt#2:在main()中它应该是
char * argv []
而不是int * argv []
- w.r.t #2 : in main() it should be
char * argv[]
and notint * argv[]
这篇关于在C中打印指针地址[两个问题]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文