指针变量';s值&;正常变量的地址和C中指针的特殊用途是什么?
这可能是一个非常基本的问题,但在C中使用指针的想法似乎让我感到困惑,或者我不知道确切的目的。我将提供一些例子来说明我的关注点: 第一点: 定义是这样的:指针变量';s值&;正常变量的地址和C中指针的特殊用途是什么?,c,arrays,pointers,C,Arrays,Pointers,这可能是一个非常基本的问题,但在C中使用指针的想法似乎让我感到困惑,或者我不知道确切的目的。我将提供一些例子来说明我的关注点: 第一点: 定义是这样的: int i = 23; printf("%d", i); printf("%d", &i); int i = 23; int *ptr; ptr = &i; printf("%d", *ptr); printf("%d", ptr); 指针是包含另一个变量地址的变量 所以,如果一个程序是这样的: int i = 23;
int i = 23;
printf("%d", i);
printf("%d", &i);
int i = 23;
int *ptr;
ptr = &i;
printf("%d", *ptr);
printf("%d", ptr);
指针是包含另一个变量地址的变量
所以,如果一个程序是这样的:
int i = 23;
printf("%d", i);
printf("%d", &i);
int i = 23;
int *ptr;
ptr = &i;
printf("%d", *ptr);
printf("%d", ptr);
另一个程序是这样的:
int i = 23;
printf("%d", i);
printf("%d", &i);
int i = 23;
int *ptr;
ptr = &i;
printf("%d", *ptr);
printf("%d", ptr);
以上两个程序可以输出相同的内容
如果指针还将变量的地址保存在其中,同时我们可以使用&
符号获取变量的地址,那么指针不能通过导出任何变量的地址来执行相同的任务吗?我的意思是,如果我不将它声明为指针并将其用作intptr=&I
在第二个代码段中,并将其用作普通变量,有什么区别
第二点:
我在某处发现:
C没有数组变量…但这实际上只是工作而已
使用具有替代语法的指针
那句话对吗?由于我还是初学者,我无法验证任何关于这一点的陈述。但这让我有些困惑。如果这一说法也正确,那么这方面的实际解决办法是什么?实际上是在后端工作的指针,而只是编译器/ide通过使用数组(显然是为了保持简单性)欺骗了我们吗?以相反的顺序回答问题: C没有数组变量……但这实际上只是使用具有替代语法的指针 这是不正确的,你需要把书签扔进垃圾桶。数组和指针是一回事,但它们不是,这是一种常见的误解。在大多数情况下,数组表达式将转换为指针表达式,数组下标是通过指针算法完成的,但数组对象是实际数组,而不是指针 如果指针还将变量的地址保存在其中,同时我们可以使用&sign获取变量的地址,那么指针不能通过派生任何变量的地址来完成同样的任务吗?我的意思是,如果我不将其声明为指针并将其用作int ptr=&I;在第二个代码片段中,将其用作普通变量,有什么区别 这段代码并没有说明指针存在的原因,或者它们有用的原因 C实际上要求我们在以下情况下使用指针:
swap
功能:
void swap( int a, int b ) { int t = a; a = b; b = t; }
此函数用于交换a
和b
中的值。但是,当我们将函数调用为
int x = 4, y = 5;
swap( x, y );
x
和y
的值不会更新,因为它们是与a
和b
不同的对象。如果我们想更新x
和y
,我们必须向它们传递指针:
并更新函数定义,如下所示:
void swap( int *a, int *b ) { int t = *a; *a = *b; *b = t; }
我们不交换a
和b
的内容,而是交换a
和b
指向的对象的内容。这总是会出现-想想scanf
函数,以及如何在标量参数上使用&
运算符
跟踪动态分配的内存
动态内存分配函数malloc
、calloc
和realloc
都返回指向动态内存缓冲区的指针;没有与该内存相关的变量
char *buffer = malloc( sizeof *buffer * some_length );
指针是跟踪该内存的唯一方法 不要在穷乡僻壤中学习C。买一本好书。我从K&R开始。尽管它很旧,但它仍然能很好地教授基础知识。这里有一些更多的书籍选项:C有数组,你所指的源代码非常非常糟糕。你所展示的两个程序片段都有未定义的行为,从这个意义上说,它们不是有效的C。这是因为指针和它指向的对象根本不是同一件事——两者甚至没有相同的类型。因此,在每种情况下,
printf()
调用中有一个参数的类型与提供的格式字符串所需的类型不匹配。此外,不,使用&
运算符绝对不能避免指针,因为应用该运算符的结果是指针。这样可以减少指针类型变量的使用,但对于避免使用指针却毫无作用。实际上,我所遵循的链接是我陷入这些困惑的原因:(@RakibulIslam:C几十年来一直教得很差,有很多错误信息的人会将错误信息传递给他人。如果你还没有这样做,请将最新的C语言标准加入书签。这不是一个很好的教学资源(它没有任何教程信息),但这是关于C语言中各种事物如何工作的权威性文件,你回答得很好:我认为这是不可能的。投票吧!